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