使用相同的列表名称设置所有元素

时间:2016-03-03 21:25:44

标签: r

数据

我有一个列表,看起来像这样:

sublist1 <- list(power=as.matrix(c(rnorm(10)),c(rnorm)),x=rnorm(10),y=rnorm(10))
sublist2 <- list(power=as.matrix(c(rnorm(10)),c(rnorm)),x=rnorm(10),y=rnorm(10))
sublist3 <- list(power=as.matrix(c(rnorm(10)),c(rnorm)),x=rnorm(10),y=rnorm(10))
mylist = list(sublist1,sublist2,sublist3)

我的目标是仅提取名为power

的矩阵

我已经尝试了

mylist_power =mylist[sapply(mylist, '[', 'Power')]

但那不起作用。

布朗尼点警报!!!

如何找到新创建的矩阵列表的平均值?

2 个答案:

答案 0 :(得分:7)

mylist_power <- sapply(mylist, '[', 'power')

并且有些意思是:

sapply(mylist_power, mean) # one per matrix
sapply(mylist_power, colMeans) # for each column and each matrix
sapply(mylist_power, rowMeans) # for each row and each matrix
mean(unlist(mylist_power)) # for the whole list
Reduce(`+`, mylist_power) / length(mylist_power) # element-wise

答案 1 :(得分:0)

purrr 解决方案,可以复制到 baseR 的 Map

#part 1 (to return only $power of every list item)
map(mylist, ~.x$power)

[[1]]
             [,1]
 [1,]  0.33281918
 [2,] -1.12404046
 [3,] -0.70613078
 [4,] -0.72754386
 [5,] -1.83431439
 [6,] -0.40768794
 [7,]  0.02686119
 [8,]  0.91162864
 [9,]  1.63434648
[10,]  0.06068561

[[2]]
             [,1]
 [1,] -0.02256943
 [2,] -0.90315486
 [3,]  0.90777295
 [4,]  1.16194290
 [5,] -0.45795340
 [6,]  0.92795667
 [7,] -2.10293514
 [8,] -1.67716711
 [9,]  1.76565577
[10,]  0.79444742

[[3]]
             [,1]
 [1,] -0.36200564
 [2,] -1.13955016
 [3,] -0.81537133
 [4,]  1.31024563
 [5,] -0.25836094
 [6,]  0.60626489
 [7,]  0.31344822
 [8,]  0.05360308
 [9,]  1.12825379
[10,] -0.55813346

第 2 部分

map(mylist, ~.x$power %>% colMeans)
[[1]]
[1] -0.1833376

[[2]]
[1] 0.03939958

[[3]]
[1] 0.02783941

改为在向量中获取这些值

map_dbl(mylist, ~.x$power %>% colMeans)
[1] -0.18333763  0.03939958  0.02783941