我想在R 3.1.1中计算从一个点到一堆点的距离:
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版本变成了另一个,还是我对这个问题的记忆错了?
我认为你对这个问题的记忆是错误的:-}来自?array
数据中的值被认为是数组中最左边下标移动最快的值。
我的记忆力不是特别可靠,但我认为自从十多年前我第一次接触S-plus以来,情况一直如此;我似乎记得,当我第一次读到它并把它放在"记住"的位置时,我感到很惊讶。
这一选择可以追溯到FORTRAN时代的一个迹象来自R简介:
5.1阵列…
数据向量中的值以与FORTRAN中相同的顺序给出数组中的值,即"列主顺序",第一个下标移动得最快,最后一个下标移动最慢。
改变这个选择会破坏太多的代码,以至于我怀疑它是否已经被改变,或者没有重大的讨论和警告。
垂直存储在R中的向量要解决这个问题,应该使用转置。
使用这个替代:
t(p-t(points))