unique()是否保留顺序?

ton*_*nov 11 r

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

set.seed(42)
v <- sample(1:10, 100, T)
v <- sort(v)
unique.v <- unique(v)
Run Code Online (Sandbox Code Playgroud)

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

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

文档并不意味着这一点,请与源代码联系

?unique
getAnywhere('unique.default')
Run Code Online (Sandbox Code Playgroud)

没有多大帮助.

相关问题:,.

ton*_*nov 15

这是我发现的. 指南将我们引向names.c,我们在其中看到

{"unique",  do_duplicated,  1,  11, 4,  {PP_FUNCALL, PREC_FN,   0}},
Run Code Online (Sandbox Code Playgroud)

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

SEXP attribute_hidden do_duplicated(SEXP call, SEXP op, SEXP args, SEXP env)
Run Code Online (Sandbox Code Playgroud)

浏览代码,我们偶然发现

dup = duplicated3(x, incomp, fL, nmax);
Run Code Online (Sandbox Code Playgroud)

这是一个参考

static SEXP duplicated3(SEXP x, SEXP incomp, Rboolean from_last, int nmax)
Run Code Online (Sandbox Code Playgroud)

最后,这里的主循环是

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

所以我的问题的答案是肯定的.