lapply 函数 /loops on lists of lists R
lapply function /loops on list of lists R
我知道这个主题在 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(data,mean)
问题是rapply不维护列表结构。
帮助和可能的一些 tips/explanations 将不胜感激。
我们可以使用嵌套的 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]])
}
}
我知道这个主题在 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(data,mean)
问题是rapply不维护列表结构。 帮助和可能的一些 tips/explanations 将不胜感激。
我们可以使用嵌套的 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]])
}
}