Re: [問題] 在迴圈中對矩陣特定區間賦值
※ 引述《clsmbstu ()》之銘言:
: [問題類型]:
: 程式諮詢(我想用R做某件事情,但是我不知道要怎麼用R寫出來)
: [軟體熟悉度]:
: 使用者(已經有用R做過不少作品)
: [問題敘述]:
: 我想在迴圈中對多個矩陣的某些部分(同樣的行列位置)做取代,
: 但是我不知道怎麼寫出一般化的code。
: 我原本想的是在這些矩陣的[1:161, 1]、[162:322, 2]、...、[806:966, 6]放進數列,
: 但紅色那句顯然行不通,想請教大家有沒有其它的辦法?謝謝!
: [程式範例]:
: evaluate <- function(...) {eval(parse(text = paste(..., sep = ".")))}
: for (k in 1:7) {
: assign(paste(LETTERS[k], "newdata", sep = "."),
: matrix(NA, nrow = 966, ncol = 6))
: # Generate "A.newdata", "B.newdata", ... ,and "G.newdata"
: j <- 1
: while (j <= ncol(evaluate(LETTERS[k], "newdata"))) {
: evaluate(emotions[k], "newdata")[1:161+(j-1)*161, j] <- seq(0, 8, 0.05)
: # length(seq(0, 8, 0.05)) = 161
: j <- j + 1
: }
: # The rest of NAs will be substituted with ...
: # other various values later in this for loop
: }
:
: [環境敘述]:
: R version 3.3.2 (2016-10-31)
: Platform: x86_64-w64-mingw32/x64 (64-bit)
: Running under: Windows 7 x64 (build 7601) Service Pack 1
: locale:
: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950
: [2] LC_CTYPE=Chinese (Traditional)_Taiwan.950
: [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950
: [4] LC_NUMERIC=C
: [5] LC_TIME=Chinese (Traditional)_Taiwan.950
: attached base packages:
: [1] stats graphics grDevices utils datasets methods base
: other attached packages:
: [1] reshape2_1.4.2 ggplot2_2.2.1 nnet_7.3-12
: loaded via a namespace (and not attached):
: [1] colorspace_1.3-2 scales_0.4.1 magrittr_1.5 assertthat_0.1
: [5] lazyeval_0.2.0 plyr_1.8.4 tools_3.3.2 gtable_0.2.0
: [9] tibble_1.2 Rcpp_0.12.9 stringi_1.1.2 grid_3.3.2
: [13] stringr_1.1.0 munsell_0.4.3
: [關鍵字]:
: 矩陣 取代 迴圈
既然 軟體熟悉度 寫 使用者(已經有用R做過不少作品)
那我就不寫for,直接用lapply, sapply, replicate做了
還沒學過也趁現在學一學吧,不然R for很慢...
numRows <- 966L
numCols <- 6L
by <- 161L
getMatrix <- function(x, by, numRows, numCols){
sapply(1L:numCols, function(y){
c(rep(0, by * (y-1)) , x, rep(0, numRows - by * y))
})
}
newdata_list <- replicate(7L, getMatrix(seq(0, 8, 0.05),
by, numRows,numCols), FALSE)
str(newdata_list)
# List of 7
# $ : num [1:966, 1:6] 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 ...
# $ : num [1:966, 1:6] 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 ...
# $ : num [1:966, 1:6] 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 ...
# $ : num [1:966, 1:6] 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 ...
# $ : num [1:966, 1:6] 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 ...
# $ : num [1:966, 1:6] 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 ...
# $ : num [1:966, 1:6] 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 ...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.233.49.208
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1486801589.A.95D.html
※ 編輯: celestialgod (36.233.49.208), 02/11/2017 16:36:39
推
02/11 20:11, , 1F
02/11 20:11, 1F
→
02/11 20:12, , 2F
02/11 20:12, 2F
→
02/11 20:12, , 3F
02/11 20:12, 3F
→
02/12 13:06, , 4F
02/12 13:06, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章