问题 unique()是否保留顺序?


想象一下,我们正在使用以下代码:

set.seed(42)
v <- sample(1:10, 100, T)
v <- sort(v)
unique.v <- unique(v)

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

在更一般的环境中,这是真的 unique() 返回一个向量,根据第一个条目排序?

文档并不意味着这一点,寻找源代码

?unique
getAnywhere('unique.default')

没有多大帮助。

相关问题:


9147
2017-11-28 08:14


起源

关于相关问题二: 这个FAQ 会帮助你更多。 - Roland
你想看 methods(unique)。特别 unique.data.frame, unique.matrix - RJ-


答案:


这是我发现的。 这个 指南引导我们 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);
}

所以我的问题的答案是


13
2017-12-05 08:38