【发布时间】:2013-11-02 03:19:42
【问题描述】:
我有 3 个数据集,我排列了 10 倍。数据集的每个排列在 3 个矩阵中构成一列(每个数据集一个矩阵)。这 3 个矩阵 (m1,m2,m3) 在列表 L 中。我想为每个条目(在本例中为 4)询问所有可能的组合(10x10x10=1000)。我已经使用 expand.grid 来提供跨另一个矩阵 M 行中的 3 个矩阵的所有列调用组合:
M<-expand.grid(seq(1:10),seq(1:10),seq(1:10))
这是我在列表中的数据:
m1<-matrix(c(1,2,1,0,3,2,1,2,3,4),nrow=4, ncol=10)
m2<-matrix(c(m1[1,]),nrow=4,ncol=10)
m3<-matrix(c(m1[2,]),nrow=4,ncol=10)
L<-list(m1, m2, m3)
你能帮我用do.call,cbind,lapply/sapply有效地从M中检索列坐标来询问L中包含的3个矩阵中的对应列并将它们绑定到一个新矩阵像这样:
m.res<-for (i in 1:nrow(M) { "get" L[[1:3]][M[i,]] }
对于i=1,m.res 将产生:
1 1 2
2 3 2
1 3 4
0 1 0
我显然需要lapply/sapply 的教程,因为这应该不难。
【问题讨论】:
-
我在您的代码中将
test更改为M。如果这不是您想要的,请为test添加一个定义。 -
+1 例如输入数据和所需输出。下次还要展示您尝试过的方法以及如何它不起作用,这将是一个完美的问题。
-
@SimonO101 好点!我在这台笔记本电脑上没有我的 .Rhistory,但我记得我尝试了各种方案将元素从 M 直接传递到 L 以子集所需的列。然后我意识到我需要使用 apply
-
@nico 是的,你是对的,谢谢你解决这个问题!
标签: r list matrix permutation apply