R中的order函数如何处理并列情况?

5
我已经阅读了这里大部分相似的问题,但我仍然很难理解在 order 函数中如何传递参数以打破绑定的情况。
R 文档中介绍的示例为:
order(x <- c(1,1,3:1,1:4,3), y <- c(9,9:1), z <- c(2,1:9))

返回
[1]  6  5  2  1  7  4 10  8  3  9

然而,当y“打破”x的联系,z“打破”y的联系时,这意味着什么? x向量为:
[1] 1 1 3 2 1 1 2 3 4 3

"y向量为:"
[1] 9 9 8 7 6 5 4 3 2 1

Also, if I eliminate z from the first function,

order(x <- c(1,1,3:1,1:4,3), y <- c(9,9:1))

它返回:
[1]  6  5  1  2  7  4 10  8  3  9

所以我不清楚y向量中的数字如何与x中的四个1,两个2和三个3的排序有关。我非常感谢帮助。谢谢!

?order如果第一个向量中存在并列的值,则使用第二个向量中的值来解决并列。如果仍然存在并列,则使用后续参数中的值来解决并列。因此,当第一个向量存在并列时,它会转到第二个向量;如果第一个向量没有并列,则不引用第二个向量。 - r2evans
1个回答

2
让我们来看看。
idx <- order(x <- c(1,1,3:1,1:4,3), y <- c(9,9:1), z <- c(2,1:9))
idx;
#[1]  6  5  2  1  7  4 10  8  3  9

首先需要注意的是:
x[idx]
# [1] 1 1 1 1 2 2 3 3 3 4

所以idx按照从最小到最大值的顺序对x中的条目进行排序。

yz中的值会影响order如何处理x中的并列情况。

x[5] = 1x[6] = 1为例。由于这里存在并列,order会在相应位置的y中查找条目,即y[5] = 6y[6] = 5。由于y[6] < y[5],因此x中的条目排序为x[6] < x[5]

如果y中也存在并列,则order将在下一个向量z中查找条目。这发生在x[1] = 1x[2] = 2的情况下,其中y[1] = 9y[2] = 9。这里z打破了并列,因为z[2] = 1 < z[1] = 2,因此x[2] < x[1]


我现在完全明白了。非常感谢您详尽的回答!@MauritsEvers - Youcheong Chang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接