想象一下,我们正在使用以下代码:
set.seed(42)
v <- sample(1:10, 100, T)
v <- sort(v)
unique.v <- unique(v)
我能确定吗? unique.v
已经排序?
在更一般的环境中,这是真的 unique()
返回一个向量,根据第一个条目排序?
文档并不意味着这一点,寻找源代码
?unique
getAnywhere('unique.default')
没有多大帮助。
想象一下,我们正在使用以下代码:
set.seed(42)
v <- sample(1:10, 100, T)
v <- sort(v)
unique.v <- unique(v)
我能确定吗? unique.v
已经排序?
在更一般的环境中,这是真的 unique()
返回一个向量,根据第一个条目排序?
文档并不意味着这一点,寻找源代码
?unique
getAnywhere('unique.default')
没有多大帮助。
这是我发现的。 这个 指南引导我们 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);
}
所以我的问题的答案是 是。