想象一下,我们正在使用以下代码:
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)
所以我的问题的答案是肯定的.