2014-10-20 38 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