2013-11-28 27 views
9

想象一下,我們使用下面的代碼:唯一()保存順序嗎?

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

我可以肯定地說unique.v已經排序?

在更一般的設置中,unique()是否返回一個矢量,按照第一個條目排序?

文檔並不意味着此,着眼於源與

?unique 
getAnywhere('unique.default') 

是一個很大的幫助不是。

相關問題:one,two

+0

關於相關的問題二:[這個FAQ](http://stackoverflow.com/questions/19226816/how-can-i-view-the-source-code-for-a-function)將幫助你更多。 – Roland

+0

你想看'方法(唯一)'。特別是'unique.data.frame','unique.matrix' – JackeJR

回答

11

這是我發現的。 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); 
} 

所以回答我的問題是