unique()是否保留顺序?

时间:2013-11-28 08:14:21

标签: r

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

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

我可以确定unique.v已经排序了吗?

在更一般的设置中,unique()是否返回根据第一个条目排序的向量是真的吗?

文档并不意味着这一点,用

查看源代码
?unique
getAnywhere('unique.default')

没有多大帮助。

相关问题:onetwo

1 个答案:

答案 0 :(得分:14)

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

所以我的问题的答案是