unique()函数是否保留顺序?

14
假设我们正在使用以下代码:
set.seed(42)
v <- sample(1:10, 100, T)
v <- sort(v)
unique.v <- unique(v)

我能确定unique.v已经排序吗?

在更一般的情况下,unique()返回一个向量,按照第一个条目排序,这是真的吗?

文档并没有暗示这一点,查看源代码:

?unique
getAnywhere('unique.default')

并没有太大的帮助。

相关问题:onetwo


关于相关问题二:这个FAQ会更有帮助。 - Roland
你想查看 methods(unique)。具体来说是 unique.data.frameunique.matrix - RJ-
1个回答

20

这是我找到的内容。 这篇 指南引领我们到 names.c ,在那里我们看到

{"unique",  do_duplicated,  1,  11, 4,  {PP_FUNCALL, PREC_FN,   0}},

之后我们转到unique.c并找到一个条目

SEXP attribute_hidden do_duplicated(SEXP call, SEXP op, SEXP args, SEXP env)

浏览代码时,我们偶然发现

dup = duplicated3(x, incomp, fL, nmax);

这是一个指向

static SEXP duplicated3(SEXP x, SEXP incomp, Rboolean from_last, int nmax)

最后,这里的主循环是:

for (i = 0; i < n; i++) {
//      if ((i+1) % NINTERRUPT == 0) R_CheckUserInterrupt();
        v[i] = isDuplicated(x, i, &data);
}

所以我的问题的答案是


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