Tôi đang cố gắng kết hợp một hàm tạo tập hợp con từ khung dữ liệu ban đầu của tôi và sau đó sử dụng lệnh SELECT và MUTATE của dplyr để cung cấp cho tôi số lượng mục nhập lớn/nhỏ, dựa trên tổng chiều rộng và chiều dài của các cánh/cánh hoa.Lỗi khi sử dụng dplyr bên trong của hàm
filter <- function (spp, LENGTH, WIDTH) {
d <- subset (iris, subset=iris$Species == spp) # This part seems to work just fine
large <- d %>%
select (LENGTH, WIDTH) %>% # This is where the problem arises.
mutate (sum = LENGTH + WIDTH)
big_samples <- which(large$sum > 4)
return (length(big_samples))
}
Về cơ bản, tôi muốn hàm trả về số lượng hoa lớn. Tuy nhiên, khi tôi chạy hàm tôi nhận được lỗi sau -
filter("virginica", "Sepal.Length", "Sepal.Width")
Error: All select() inputs must resolve to integer column positions.
The following do not:
* LENGTH
* WIDTH
Tôi đang làm gì sai?
chức năng 'dplyr' sử dụng đánh giá không chuẩn. Đó là lý do tại sao bạn không phải trích dẫn tên biến của bạn khi bạn làm một cái gì đó như 'select (mtcars, mpg)', và tại sao 'select (mtcars," mpg ")' không hoạt động. Khi bạn sử dụng 'dplyr' trong các hàm, bạn có thể sẽ muốn sử dụng" đánh giá tiêu chuẩn ". Xem 'họa tiết (" nse ")' để biết thêm chi tiết. – ialm
nhưng tại sao lại là chức năng? – MLavoie
Giải pháp nhanh chóng và bẩn là thay đổi 'select (LENGTH, WIDTH)%>%' thành 'select (get (LENGTH), nhận (WIDTH))%>%'. Tuy nhiên, bạn thực sự nên sử dụng 'select _()' và 'mutate _()' trong các hàm của bạn. – ialm