Select r 中嵌套列表的列
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,]
我有一个包含 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,]