2016-05-23 13 views
5

Tôi đang gặp khó khăn khi hiểu những gì tapply chức năng nào khi đối số FUNnull.R của tapply với null chức năng

Các documentation nói:

Nếu FUN là NULL, tapply trả về một vector có thể được sử dụng subscript mảng đa chiều tapply thường sản xuất.

Ví dụ: ví dụ sau của tài liệu làm gì?

ind <- list(c(1, 2, 2), c("A", "A", "B")) 
tapply(1:3, ind) #-> the split vector 

Tôi không hiểu kết quả:

[1] 1 2 4 

Cảm ơn.

+1

Xem 'tương tác (ind) 'tạo ra tất cả các kết hợp của các mức" yếu tố ""; trong ví dụ của bạn, ouput bạn nhận được tương ứng với "X" khớp trong 'cấp độ (tương tác (ind)) [c (1, 2, 4)]' theo đối số "INDEX". Xem thêm, cũng 'tapply (1: 5, list (c (1, 2, 2, 2, 1), c (" A "," A "," B "," B "," A "))) 'có thể được nhìn thấy, rõ ràng hơn, như' không đúng 'nhóm "X" bởi "INDEX" –

+0

Kết quả của 'ix <- tapply (X, INDEX)' không phụ thuộc vào 'X' - chỉ trên' INDEX' - và, đặc biệt, nếu 'INDEX' là một danh sách thì' ix' bằng 'as.integer (do.call (tương tác, INDEX))' –

Trả lời

3

Nếu bạn chạy tapply với một chức năng nào đó (không phải là NULL), nói sum, giống như trong sự giúp đỡ, bạn sẽ thấy rằng kết quả là một mảng 2 chiều với NA trong một tế bào:

res <- tapply(1:3, ind, sum) 
res 
    A B 
1 1 NA 
2 2 3 

Nó có nghĩa là một sự kết hợp của các yếu tố, cụ thể là (1, B), là vắng mặt. Khi FUN là NULL, nó trả về một chỉ số vectơ tương ứng với tất cả các kết hợp yếu tố hiện tại. Để kiểm tra điều này:

> which(!is.na(res)) 
[1] 1 2 4 

Một điều cần đề cập đến, chức năng quy định có thể trở lại bản thân của NA, như trong ví dụ đồ chơi sau:

> f <- function(x){ 
     if(x[[1]] == 1) return(NA) 
     return(sum(x)) 
    } 
> tapply(1:3, ind, f) 
    A B 
1 NA NA 
2 2 3 

Vì vậy, nói chung, NA không có nghĩa là một kết hợp yếu tố vắng mặt.

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