作者celestialgod (天)
看板R_Language
标题Re: [问题] 在回圈中对矩阵特定区间赋值
时间Sat Feb 11 16:26:25 2017
※ 引述《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://webptt.com/cn.aspx?n=bbs/R_Language/M.1486801589.A.95D.html
※ 编辑: celestialgod (36.233.49.208), 02/11/2017 16:36:39
1F:推 clsmbstu: 这些function每个我都懂,但实在没想过可以这样用... :O 02/11 20:11
2F:→ clsmbstu: 所以sapply和replicate在R很常用来取代for loop罗? 02/11 20:12
3F:→ clsmbstu: 很谢谢你!长见识了~ 02/11 20:12
4F:→ abc2090614: R里面可以用函数取代的就尽量不要用for loop 02/12 13:06