2013-07-23 42 views
5

Bạn chưa từng tham gia điều này trước đây. Từ trang giúp đỡ của pairs.panels trong gói psych, người ta thấy như sau:Tên của cú pháp cú pháp này là gì và tài liệu được viết ở đâu?

data(iris) 
pairs.panels(iris[1:4],bg=c("red","yellow","blue")[iris$Species],pch=21) 

Tôi muốn hỏi về lập luận này, thiết lập màu nền của các vòng tròn vẽ cho các điểm dữ liệu: bg=c("red","yellow","blue")[iris$Species] Rõ ràng, lập luận này cộng 3 cấp độ của iris$Species, một yếu tố, với 3 màu được đưa ra. Tôi không hỏi về nó.

Tôi tự hỏi cách thức kết hợp các đối số được truyền với các mức dữ liệu trên bay được gọi là gì và nó được ghi chép ở đâu? Nó có vẻ như một số ma thuật R. Nếu tôi đã viết chức năng này, tôi có khả năng sẽ chuyển màu và tên cột của yếu tố một cách riêng biệt và sau đó tạo liên kết theo cách thủ công đằng sau hậu trường. Thủ thuật này có thể rất hữu ích. Nhưng trên mặt của nó [iris$Species] trông giống như dữ liệu được lập chỉ mục chính nó. Bạn không thể gõ [iris$Species] trong giao diện điều khiển ví dụ, nó chỉ đưa ra một lỗi. Bạn có thể nhập c("red","yellow","blue")[iris$Species] và nhận câu trả lời đúng. Có vẻ như có một số tái chế đang diễn ra, nhưng tôi không chắc. Tôi muốn tò mò về nơi mà tài liệu này được ghi lại, và nếu bất cứ ai có thể giải thích những gì đang xảy ra trong một hoặc hai câu ngắn. Ví dụ: [iris$Species] được chuyển đổi thành số nguyên, sau đó được sử dụng để lập chỉ mục danh sách 3 màu? Tôi nghĩ đó là nó, nhưng tôi muốn một ý kiến ​​khác.

Lưu ý: mẹo tương tự được sử dụng trong graphics::pairs trên đó panels.pairs được dựa trên.

+1

Nguồn C cho điều này "lừa" có thể được tìm thấy ở đây: https://github.com/wch/r-source/blob/trunk/src/main/subset.c –

+0

Cảm ơn Ferdinand . –

Trả lời

7

Có hai điều xảy ra ở đây:

  1. Yếu tố iris$Species đang được cưỡng chế số/số nguyên.
  2. Các chỉ số nguyên này đang được sử dụng theo cách thông thường.

Cưỡng chế

này rất quan trọng bởi vì các nhãn yếu tố không phải là màu đỏ/vàng/xanh trong trường hợp này:

> all(c("red","yellow","blue")[iris$Species] == c("red","yellow","blue")[as.integer(iris$Species)]) 
[1] TRUE 
> all(c("red","yellow","blue")[iris$Species] == c("red","yellow","blue")[as.character(iris$Species)]) 
[1] NA 

Indexing với các yếu tố lặp đi lặp lại

Trong R , bất cứ khi nào bạn lập chỉ mục một vectơ đơn giản, các phần tử của chỉ mục được lặp lại được bao gồm nhiều lần.

> x <- letters[1:5] 
> x 
[1] "a" "b" "c" "d" "e" 
> x[c(1,3)] 
[1] "a" "c" 
> x[c(1,3,3,3,3)] 
[1] "a" "c" "c" "c" "c" 

Điều này thường được khai thác khi lấy mẫu thay thế.

Tài liệu này được viết ở đâu?

Ở nhiều nơi, mặc dù không phải lúc nào cũng nhấn mạnh mức độ tuyệt vời của nó. Ví dụ, trên trang 11, W. N. Venables, D. M. Smith và Nhóm phát triển cốt lõi R. Giới thiệu về R. Ghi chú về R: Môi trường lập trình để phân tích dữ liệu và đồ họa. Phiên bản 2.5.0 (2007-04-23). trạng thái:

> x[1:10] 
selects the first 10 elements of x (assuming length(x) is not less than 10). Also 
> c("x","y")[rep(c(1,2,2,1), times=4)] 
(an admittedly unlikely thing to do) produces a character vector of length 16 consisting of 
"x", "y", "y", "x" repeated four times. 
+0

Vâng, tôi nghĩ tôi vừa mới nhận ra điều đó. Phép thuật của trình phân tích cú pháp tôi đoán. Vẫn còn khá rõ ràng, và tôi nghĩ rằng tôi đã viết rất nhiều mã mà không cần thiết tôi đã nhận ra điều này. Tài liệu này có ở bất kỳ đâu không? Tôi đã nghĩ rằng nó có thể được thảo luận trong thao tác dữ liệu của Phil Spector với R nhưng không có thời gian để duyệt. –

+0

@BryanHanson Tôi chắc chắn rằng nó nằm trong hầu hết các hướng dẫn cơ bản. –

+2

Việc lập chỉ mục theo các yếu tố được đề cập trong '? Trích xuất':" Chỉ mục theo các yếu tố được cho phép và tương đương với chỉ mục bằng các mã số (xem yếu tố) chứ không phải bởi các giá trị ký tự được in (mà sử dụng [as.character (i)]) " – joran

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