重复应用多次。我应该使用 for 循环吗?
repeat apply multiple times. Should I use a for loop?
我有一个包含五列和 51695 行的大型矩阵 (zs),例如:
str(zs1)
num [1:51695, 1:5] 1.347 1.189 1.675 1.055 0.224 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:5] "run 1" "run 2" "run 3" "run 4" ...
我想生成一个向量,其中包含 zs 列中每 5 个值的中值。
zs.stouffer1 = apply(zs1, MARGIN = 1, median)
如何在 i 个 zs 矩阵的循环中执行此操作?
这是我的尝试:
for (i in 1:23) {
zs.stouffer <- paste("zs.stouffer", i, sep = "")
value <- apply(zs[i], MARGIN = 1, median)
assign(zs.stouffer,value)
}
但我得到:
Error in apply(zs[i], MARGIN = 1, median) : dim(X) must have a positive length
你应该使用 get(paste0("zs",i))
而不是 zs[i]
:
for (i in 1:23) {
zs.stouffer <- paste("zs.stouffer", i, sep = "")
value <- apply(get(paste0("zs",i)), MARGIN = 1, median)
assign(zs.stouffer,value)
}
但是正如@lmo 在上面的评论中提到的,最好在列表中组合矩阵并使用 lapply
。
我有一个包含五列和 51695 行的大型矩阵 (zs),例如:
str(zs1)
num [1:51695, 1:5] 1.347 1.189 1.675 1.055 0.224 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:5] "run 1" "run 2" "run 3" "run 4" ...
我想生成一个向量,其中包含 zs 列中每 5 个值的中值。
zs.stouffer1 = apply(zs1, MARGIN = 1, median)
如何在 i 个 zs 矩阵的循环中执行此操作?
这是我的尝试:
for (i in 1:23) {
zs.stouffer <- paste("zs.stouffer", i, sep = "")
value <- apply(zs[i], MARGIN = 1, median)
assign(zs.stouffer,value)
}
但我得到:
Error in apply(zs[i], MARGIN = 1, median) : dim(X) must have a positive length
你应该使用 get(paste0("zs",i))
而不是 zs[i]
:
for (i in 1:23) {
zs.stouffer <- paste("zs.stouffer", i, sep = "")
value <- apply(get(paste0("zs",i)), MARGIN = 1, median)
assign(zs.stouffer,value)
}
但是正如@lmo 在上面的评论中提到的,最好在列表中组合矩阵并使用 lapply
。