2013-11-28 16 views
9

Hãy tưởng tượng chúng ta đang sử dụng đoạn mã sau:Lệnh duy trì() có duy nhất không?

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

Tôi có thể chắc chắn rằng unique.v đã được sắp xếp?

Trong cài đặt chung hơn, đúng là unique() trả về một véc tơ, được sắp xếp theo mục nhập đầu tiên?

Các tài liệu không bao hàm này, tìm đến nguồn với

?unique 
getAnywhere('unique.default') 

không phải là một sự giúp đỡ nhiều.

Câu hỏi liên quan: one, two.

+0

Về câu hỏi liên quan hai: [Câu hỏi thường gặp này] (http://stackoverflow.com/questions/19226816/how-can-i-view-the-source-code-for-a-function) sẽ giúp bạn nhiều hơn. – Roland

+0

bạn muốn xem 'phương thức (duy nhất)'. cụ thể là 'unique.data.frame',' unique.matrix' – JackeJR

Trả lời

11

Đây là những gì tôi đã tìm thấy. This dẫn đưa chúng ta đến names.c, nơi chúng ta thấy

{"unique", do_duplicated, 1, 11, 4, {PP_FUNCALL, PREC_FN, 0}}, 

Sau đó chúng tôi chuyển sang unique.c và tìm một mục

SEXP attribute_hidden do_duplicated(SEXP call, SEXP op, SEXP args, SEXP env) 

Duyệt mã, chúng ta vấp ngã khi

dup = duplicated3(x, incomp, fL, nmax); 

mà là tham chiếu đến

static SEXP duplicated3(SEXP x, SEXP incomp, Rboolean from_last, int nmax) 

Cuối cùng, vòng lặp chính ở đây là

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

Vì vậy, câu trả lời cho câu hỏi của tôi là .

Các vấn đề liên quan