R:索引矩阵是否有可能从"by row"更改为"by col"?



我想在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))

最新更新