2012-08-30 78 views
2

我在R 2与3列,看起来像一个数组:切片[R阵列通过索引对

>x 
[,1]  [,2] [,3] 
V1 7.803550 0.000000 0 
V2 7.842899 0.000000 0 
V3 7.310273 0.000000 0 
V4 7.230438 0.000000 0 
V5 6.582147 1.097024 0 
V6 9.364152 0.000000 0 

对于我的阵列片,我想从各行的不同列,让我想要什么指标有:

rows<-1:6 
cols<-c(1,1,1,2,3,1) 

当尝试获得而不是获取与适当的值的向量R中的适当阵列片,

> t 
     V1  V2  V3  V4  V5  V6 
7.803550 7.842899 7.310273 0.000000 0.000000 9.364152 

我得到其中给定的列被打印出所有选定行

输出的6×6矩阵
> t 
     [,1]  [,2]  [,3]  [,4] [,5]  [,6] 
V1 7.803550 7.803550 7.803550 0.000000 0 7.803550 
V2 7.842899 7.842899 7.842899 0.000000 0 7.842899 
V3 7.310273 7.310273 7.310273 0.000000 0 7.310273 
V4 7.230438 7.230438 7.230438 0.000000 0 7.230438 
V5 6.582147 6.582147 6.582147 1.097024 0 6.582147 
V6 9.364152 9.364152 9.364152 0.000000 0 9.364152 

我怎样才能获得在载体我期望的索引对没有一个for循环?

每大卫的建议,我希望将工作将

t<-x[rows,cols] 
+0

如果你显示结果,你应该在计算't'时显示行(我猜't = x [rows,cols] ') –

回答

8

如何:

x[cbind(rows, cols)] 

读入?“[”为什么这应该起作用。 (我会认为它比Robinson的sapply策略要快)

+0

谢谢迪文!这工作完美,看起来也很干净 – Mitch

2

也许不能做的代码比

sapply(1:length(rows), function(i) x[rows[i], cols[i]]) 
+0

谢谢大卫!那就是诀窍。 – Mitch

+0

@Mitch:太好了,但是你应该选择迪文的答案,哪个更好(每天学点新东西!) –

+0

没有正确的,错误的或者更好的。只有适用的家庭。 :P –