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,]