R order()"返回一个排列"

时间:2014-11-19 14:34:50

标签: r permutation

在R文档中,它说

  

order 返回一个排列,将其第一个参数重新排列为升序或降序

我理解一个排列是对列表中元素的重新排序。 Google对“置换”的数学定义是“改变一系列项目的排列,尤其是线性顺序的行为。”

从文档中,我预计调用order(5:1)将返回'[1] 1 2 3 4 5',即原始向量的置换。我已经知道它包含一个索引向量,(5:1)[order(5:1)]返回'[1] 1 2 3 4 5'

对我而言,似乎顺序返回向量索引的排列,而不是向量本身的排列。

order真的“返回重新排列其第一个参数的排列”吗?如果是这样,你如何正确地解释这个陈述?

或者说“订单返回可用于重新排列其第一个参数的索引的排列”会更正确吗?

(我意识到这很迂腐,但我正在努力改进阅读文档,似乎代码文档本质上是迂腐的。)

3 个答案:

答案 0 :(得分:3)

排列可以有两个含义:

  • 这是一个重新排序列表中元素的函数。
  • 这是列表中重新排序的元素。

此处的帮助文件是指第一个定义。

答案 1 :(得分:0)

我知道你要求的术语更多,而不是实际意义,但值得注意的是,他们提供的实施更有用,更清晰。调用具有多个向量的顺序是有效的,例如,当按数据框中的多个列进行排序时。返回索引比返回组合值的元组更实用,并且在等效值的情况下映射回原始行更不明确。

如果您更大一点是文档会更清楚返回值是索引,我同意。

答案 2 :(得分:0)

order返回一个索引向量,用于将输入参数置换为排序顺序。 x[order(x)]始终与sort(x)相同。以下内容演示了returns a permutation which rearranges its first argument into ascending or descending order的含义。

order(mtcars$qsec)
# [1] 29 31 24 30  7  1 27 22 28  2  5 25 23 12 17 13 16 15 14 10 19 32  3 11 26  4 18 20  8
# [30] 21  6  9

sort(mtcars$qsec)
# [1] 14.50 14.60 15.41 15.50 15.84 16.46 16.70 16.87 16.90 17.02 17.02 17.05 17.30 17.40
# [15] 17.42 17.60 17.82 17.98 18.00 18.30 18.52 18.60 18.61 18.90 18.90 19.44 19.47 19.90
# [29] 20.00 20.01 20.22 22.90

# would be the same as 
mtcars[order(mtcars$qsec),]