[英]Select columns from nested lists in r
我有一个包含50个元素的列表,每个元素都是21x2的矩阵。 我想提取每个第一列,以便将每个21x2矩阵的第一列乘以另一个矩阵。
示例数据:
x<-replicate(50,cbind(rnorm(21,0,1),rnorm(21,1,1)))
x<-lapply(seq(dim(x)[3]), function(i) x[ , , i])
x[[1]]
[,1] [,2]
[1,] -1.00653872 1.2780327
[2,] -0.30442989 -0.6854457
[3,] -1.05715492 -0.3464085
[4,] 0.12005815 1.1885382
[5,] 0.93834177 1.4968285
[6,] 0.85975400 1.3084381
[7,] 0.91980222 -0.1580829
[8,] 0.35785346 1.7679500
[9,] -1.03510124 2.2865753
[10,] -0.74853505 0.5148834
[11,] -1.23582377 0.8514812
[12,] 0.69546075 0.8294420
[13,] 0.08527011 1.7080554
[14,] -0.81635552 0.7492530
[15,] 0.53826428 -0.3058294
[16,] 0.16545497 0.4415540
[17,] -0.27144363 0.8299643
[18,] 0.02851933 1.2673526
[19,] 1.86516449 0.3009744
[20,] -0.46998359 -0.3232826
[21,] -0.60222069 2.3836219
assign <- rep(c(0,1),times=c(10,11))
如果我做
x[[1]][,1]*assign
我得到了我想要的东西,但是我希望能够在没有for循环的情况下对x的所有元素执行此操作。
我试过了
alt<-lapply(x, `[[`, 1)
但这只给出了第一列的第一个元素,而我想要整个向量。
有什么建议么?
尝试使用split
将每个矩阵按列拆分,并采用第一个矩阵
sapply(x, function(mat) split(mat, col(mat))[1])
您也可以尝试simplify2array
simplify2array(x)[,1,]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.