2012-08-30 74 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 –