考虑以下结构的矩阵列表
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 新手,发现索引列表很难理解。任何人都可以用新手术语解释和/或提供替代解决方案吗?在分析数据时,我经常陷入类似的情况,并浪费很长时间进行刷新。提前致谢。
最佳答案
我会让你的代码更清晰一点:
lapply(l1, function(x) {
x[,c(TRUE, FALSE)]
}
那么发生了什么?您获取列表:l1
并将其传递给lapply
。 lapply
将您的列表分解为列表项,并将每个列表项迭代地传递给您在 lapply
的第二个参数中定义的函数。该函数有一个参数x
,它成为列表l1
中的单个项目。这些部分:x
现在可以由函数中的代码进行处理。您希望从这些矩阵中提取每隔一列,因此您在该矩阵 x 中索引第一、第三、第五等。
x 的索引本身是[行,列]
,因此您通过在逗号之前不指定任何内容来请求所有行,并通过指定c(TRUE, FALSE )
位于逗号之后。向量 c(TRUE, FALSE)
会重复与矩阵中的列数一样长的长度,因此您不必使用:seq(1, 12, 2)
code> 来获取你想要的索引。
在我看来,这个问题没有其他明显的解决方案,您已经自己指定了最佳解决方案:)
关于r - 通过 R 中的矩阵列表进行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48395550/