Tôi muốn parameterise việc tính toán sau bằng dplyr
mà tìm thấy những giá trị của Sepal.Length
có liên quan đến nhiều hơn một giá trị của Sepal.Width
:luận Pass để dplyr chức năng
library(dplyr)
iris %>%
group_by(Sepal.Length) %>%
summarise(n.uniq=n_distinct(Sepal.Width)) %>%
filter(n.uniq > 1)
Thông thường tôi sẽ viết một cái gì đó như thế này:
not.uniq.per.group <- function(data, group.var, uniq.var) {
iris %>%
group_by(group.var) %>%
summarise(n.uniq=n_distinct(uniq.var)) %>%
filter(n.uniq > 1)
}
Tuy nhiên, phương pháp này sẽ phát sinh lỗi vì dplyr
sử dụng non-standard evaluation. Chức năng này nên được viết như thế nào?
Như một vấn đề về phong cách, tôi sẽ khuyên bạn không nên sử dụng dấu chấm trong các tên trong R hiện đại, ngoại trừ trong tổng số S3. Thật khó hiểu. Quy ước đặt tên được sử dụng (trong số những người khác) bởi 'dplyr' là đẹp hơn nhiều:' names_with_underscores'. –
Tôi biết rằng [Hướng dẫn về phong cách của Hadley Wickham] (http://adv-r.had.co.nz/Style.html) đề xuất ký hiệu gạch dưới, nhưng [Hướng dẫn kiểu Google R] (https: // google -styleguide.googlecode.com/svn/trunk/Rguide.xml) thúc đẩy khoảng thời gian (mặc dù không phải cho các chức năng mà tôi đã thực hiện ở đây). Trong các ngôn ngữ khác, khoảng thời gian được sử dụng để truy cập thành viên (ví dụ 'myArray.length' trong javascript), có xung đột nào khác trong R không? – asnr
Hướng dẫn kiểu Google thường khủng khiếp. Trong trường hợp cụ thể này, vấn đề là nó dẫn đến sự mơ hồ với các phương thức S3: là 'some.class.method' một phương thức' some' của lớp 'class.method' hoặc nó là phương thức' some.class' của lớp ' phương thức'? Hơn nữa, nó dẫn đến các tên không nhất quán khi các phần của mã của bạn được triển khai trong C (++), vì các phần đó không hỗ trợ dấu chấm trong tên, yêu cầu ánh xạ tên hàm phụ trợ cho các tên R khác nhau. –