MIH*_*MIH 17 loops r list 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)
Run Code Online (Sandbox Code Playgroud)
现在,我想获得每个向量的均值列表.结果将是三个元素(列表)的列表.
我只知道如何获得矢量列表的结果列表
for (i in 1:length(data1)){
means <- lapply(data1,mean)
}
Run Code Online (Sandbox Code Playgroud)
或者:
lapply(data1,mean)
我知道如何使用所有方法rapply:
rapply(data,mean)
问题是rapply不维护列表结构.非常感谢帮助和可能的一些提示/解释.
akr*_*run 46
我们可以使用嵌套循环遍历列表 lapply/sapply
lapply(data, sapply, mean)
Run Code Online (Sandbox Code Playgroud)
否则写成
lapply(data, function(x) sapply(x, mean))
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要具有list结构的输出,lapply则可以使用嵌套
lapply(data, lapply, mean)
Run Code Online (Sandbox Code Playgroud)
或者rapply,我们可以使用参数how来获得我们想要的输出类型.
rapply(data, mean, how='list')
Run Code Online (Sandbox Code Playgroud)
如果我们使用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]])
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18302 次 |
| 最近记录: |