2014-10-20 41 views
0

我想從一個點計算中的R 3.1.1距離一堆要點:R:索引矩陣是否可以從「逐行」更改爲「逐列」?

p=c(1,2) 
points=rbind(c(2,3),c(5,3),c(2,5)) 
p-points 

從我的經驗,我想結果應該是:

 [,1] [,2] 
[1,] -1 -1 
[2,] -4 -1 
[3,] -1 -3 

但我得到:

 [,1] [,2] 
[1,] -1 -1 
[2,] -3 -2 
[3,] -1 -3 

我意識到索引是列式而不是行式。這是從一個R版本改變到另一個還是我在這個問題上的記憶錯誤?

+0

謝謝你的回答。我知道什麼計算有助於擺脫這個問題,但我問自己,這是否在最後幾個版本中發生了變化。這意味着我必須檢查我編寫的無數代碼行。 – 2014-10-20 09:25:18

+0

Ben Muller你能指定給出不同結果的版本嗎?我正在使用新版本'R版本3.1.1',但我想這與前幾個版本是一樣的。 – akrun 2014-10-20 09:35:47

+0

如上所述,它是3.1.1。看起來像user20637有答案,並指出,沒有改變,我搞砸了。謝謝。 – 2014-10-20 11:13:00

回答

1

我想,你對這個問題的記憶是錯誤的: - } 從?array

數據的值取爲那些與數組中最左下標移動最快。

我的記憶力不是特別可靠,但我認爲這是自十多年前我第一次接觸到S-plus以來的情況;我似乎記得當我第一次閱讀它並在「記住」插槽中提交時感到驚訝。

,這種選擇可以追溯到FORTRAN天來自導論至R的指示:

5.1陣列 ...

在數據載體中的值給出的值的數組中與FORTRAN中的順序相同,即「列主要順序」,第一個下標移動得最快,最後一個下標最慢。

改變這個選擇會破壞太多的代碼,我懷疑它已被改變,或者沒有重大的討論和警告。

+0

感謝您提供這些見解。看起來我搞砸了。 – 2014-10-20 11:13:33

0

爲了解決這個問題,存儲在R中的矢量應該使用轉置。

用這個代替:

t(p-t(points)) 
+0

對不起,我寫答案的時候,沒有任何答案! – user1436187 2014-10-20 09:17:56