索引R中的矩阵列表

时间:2018-01-23 06:34:16

标签: r list matrix indexing

考虑以下结构的矩阵列表

m1 <- matrix(floor(runif(156,min=0, max=10)), ncol=12)
m2 <- matrix(floor(runif(120,min=0, max=10)), ncol=12)
m3 <- matrix(floor(runif(120,min=0, max=10)), ncol=12)
m4 <- matrix(floor(runif(204,min=0, max=10)), ncol=12)
l1<-list(m1,m2,m3,m4)

如何恢复所有列出的矩阵中的范围列表?我知道一个有效的解决方案,如下例所示:

lapply(l1, function(x)x[,seq(1,12,2)])

但我是R的新手并且很难找到索引列表。任何人都可以用新手条款解释和/或提供替代解决方案吗?在分析我的数据时,我经常陷入类似的情况,并且浪费了很长时间。提前谢谢。

1 个答案:

答案 0 :(得分:3)

我会通过写下来让你的代码更清晰:

lapply(l1, function(x) {
    x[,c(TRUE, FALSE)]
}

那发生了什么?您将列表:l1并传递给lapplylapply将列表分解为列表项,并将每个列表迭代地传递给您在lapply的第二个参数中定义的函数。此函数只有一个参数x,它将成为列表l1中的单个项目。这些部分:x现在可以由函数中的代码处理。您希望从这些矩阵中提取每个第二列,因此您可以在该矩阵x中索引第1,第3,第5列等。

x的索引本身是[row, column],因此您可以通过在逗号之后指定c(TRUE, FALSE)之前在逗号和一些列之前指定任何内容来要求所有行。向量c(TRUE, FALSE)的重复次数与矩阵中的列数一样长,因此您不必使用:seq(1, 12, 2)来获取所需的索引。

在我看来,没有其他明显的解决方案,你已经自己指定了最好的解决方案:)