在更深层次的列表中计算R

在更深层次的列表中计算R,r,lapply,R,Lapply,想象一下,我有两个级别的列表: lll <- list() lll[[1]] <- list(1:10, 1:5, 1:2) lll[[2]] <- list(10:20, 20:30) lll [[1]] [[1]][[1]] [1] 1 2 3 4 5 6 7 8 9 10 [[1]][[2]] [1] 1 2 3 4 5 [[1]][[3]] [1] 1 2 [[2]] [[2]][[1]] [1] 10 11 12 1

想象一下,我有两个级别的列表:

lll <- list()
lll[[1]] <- list(1:10, 1:5, 1:2)
lll[[2]] <- list(10:20, 20:30)
lll
 [[1]]
 [[1]][[1]]
  [1]  1  2  3  4  5  6  7  8  9 10

 [[1]][[2]]
 [1] 1 2 3 4 5

 [[1]][[3]]
  [1] 1 2


 [[2]]
 [[2]][[1]]
  [1] 10 11 12 13 14 15 16 17 18 19 20

 [[2]][[2]]
  [1] 20 21 22 23 24 25 26 27 28 29 30

lll这里有一个可能的解决方案(使用rappy=recursive apply)可以在任何深度工作:

lll <- list()
lll[[1]] <- list(1:10, 1:5, 1:2)
lll[[2]] <- list(10:20, 20:30)

res <- rapply(lll,mean,how='replace')
> res
[[1]]
[[1]][[1]]
[1] 5.5

[[1]][[2]]
[1] 3

[[1]][[3]]
[1] 1.5


[[2]]
[[2]][[1]]
[1] 15

[[2]][[2]]
[1] 25

令人惊讶的是,从4行代码到1行代码都是如此!这就是你要找的吗?你需要一种方法来计算任意深度的向量平均值吗,或者仅仅是两个深度的向量平均值吗?我甚至没有想过,DigeMail!正如您所提到的,如果有functional,那就太好了。在functional中,我可以输入任何函数(
mean
sum
等等),并在任何深度计算该函数。但是我还没有试过,所以请求你的帮助对我来说太丢脸了。:)乔尔。威尔逊,你的回答帮助了我!哇,从没听说过rappy函数。显然,我需要花更多的时间阅读R中的函数式编程。非常感谢@很高兴能帮上忙;)@这是很棒的代码。。。从不知道
rappy()
+1.
lll <- list()
lll[[1]] <- list(1:10, 1:5, 1:2)
lll[[2]] <- list(10:20, 20:30)

res <- rapply(lll,mean,how='replace')
> res
[[1]]
[[1]][[1]]
[1] 5.5

[[1]][[2]]
[1] 3

[[1]][[3]]
[1] 1.5


[[2]]
[[2]][[1]]
[1] 15

[[2]][[2]]
[1] 25
res <- rapply(lll,mean,how='replace')
> res
[1]  5.5  3.0  1.5 15.0 25.0