【问题标题】:R: Is it possible that indexing matrices changed from "by row" to "by col"?R:索引矩阵是否有可能从“按行”更改为“按列”?
【发布时间】:2014-10-20 09:05:53
【问题描述】:

我想在 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 版本更改为另一个版本还是我对那个问题的记忆有误?

【问题讨论】:

  • 感谢您的回答。我知道什么计算有助于摆脱这个问题,但我问自己这是否在最近几个版本中发生了变化。这意味着我必须检查我编写的无数行代码。
  • Ben Muller 你能指定给出不同结果的版本吗?我正在使用新版本R version 3.1.1,但我想最近几个版本都是一样的。
  • 如上所述,它是 3.1.1。似乎 user20637 有答案并指出没有变化,我把它搞砸了。谢谢。

标签: r matrix indexing


【解决方案1】:

我认为你对那个问题的记忆是错误的 :-} 来自?array

数据中的值被认为是数组中最左边下标移动最快的值。

我的记忆力不是特别可靠,但我认为自从我十多年前第一次接触 S-plus 以来就是这种情况;我似乎记得当我第一次阅读它并将其归档到“牢记”插槽时感到惊讶。

这一选择可以追溯到 FORTRAN 时代的迹象来自 An Introduction to R:

5.1 数组 ...

数据向量中的值以与它们在 FORTRAN 中出现的顺序相同的顺序给出数组中的值,即“列主顺序”,第一个下标移动最快,最后一个下标最慢。

更改此选择会破坏太多代码,以至于我非常怀疑它是否已被更改,或者不会进行重大讨论和警告。

【讨论】:

  • 感谢您提供这些见解。看来我搞砸了。
【解决方案2】:

垂直存储在 R 中的向量来解决这个问题,你应该使用转置。

改用这个:

t(p-t(points))

【讨论】:

  • 对不起,我写答案的时候,没有答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
相关资源
最近更新 更多