r - 在列表列表 R 上应用函数/循环

标签 r list loops lapply

我知道这个主题在 SO 上出现过几次,但示例通常更复杂,我想对这个简单的情况有一个答案(或一组可能的解决方案)。我仍然专注于 R 和一般编程。因此,在这里我想使用 lapply 函数或一个到 data 列表的简单循环,该列表是三个向量列表的列表。

data1 <- list(rnorm(100),rnorm(100),rnorm(100))
data2 <- list(rnorm(100),rnorm(100),rnorm(100))
data3 <- list(rnorm(100),rnorm(100),rnorm(100))

data <- list(data1,data2,data3)

现在,我想获取每个向量的均值列表。结果将是一个包含三个元素(列表)的列表。

我只知道如何获取向量列表的结果列表和

for (i in 1:length(data1)){
        means <- lapply(data1,mean)
}

或通过:

lapply(data1,mean)

我知道如何使用rapply获取所有方法:

rapply(数据,平均值)

问题是rapply不维护列表结构。 非常感谢帮助以及可能的一些提示/解释。

最佳答案

我们可以使用嵌套的lapply/sapply循环遍历列表的列表

 lapply(data, sapply, mean)

另外写为

 lapply(data, function(x) sapply(x, mean))

或者,如果您需要具有 list 结构的输出,可以使用嵌套的 lapply

 lapply(data, lapply, mean)

或者使用rapply,我们可以使用参数how来获得我们想要的输出类型。

  rapply(data, mean, how='list')

如果我们使用for循环,我们可能需要创建一个对象来存储结果。

  res <- vector('list', length(data))
  for(i in seq_along(data)){
    for(j in seq_along(data[[i]])){
      res[[i]][[j]] <- mean(data[[i]][[j]])
    }
   }

关于r - 在列表列表 R 上应用函数/循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561238/

相关文章:

RecordLinkage 包和 RLBigDataLinkage 类对象

r - 将多个数据帧写入同一个 json 对象

javascript - 跳过 do/while 循环

java - 在 Java 中循环后,跟踪文件中字符串出现的时间将不起作用

r - 在直方图中添加一条线

r - 逻辑回归在 R 中预测 "NA"概率 - 为什么?

C 链表推送函数,只是检查这个是否正确

python - 从列表中提取 x 和 y 值

list - Prolog-如何检查列表是否包含某些元素?

python - Python中的网格搜索功能