重复应用多次。我应该使用 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