Я пытаюсь собрать функцию, которая создает подмножество из моего исходного фрейма данных, а затем использует SELECT и MUTATE dplyr, чтобы дать мне количество больших/малых записей на основе сумма ширины и длины чашелистиков/лепестков.Ошибка при использовании dplyr внутри функции
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))
}
В принципе, я хочу, чтобы функция возвращала количество больших цветов. Однако, когда я запускаю функцию, я получаю следующую ошибку:
filter("virginica", "Sepal.Length", "Sepal.Width")
Error: All select() inputs must resolve to integer column positions.
The following do not:
* LENGTH
* WIDTH
Что я делаю неправильно?
'dplyr' функции нестандартная оценка. Вот почему вам не нужно указывать свои имена переменных, когда вы делаете что-то вроде 'select (mtcars, mpg)' и почему 'select (mtcars," mpg ")' не работает. Когда вы используете функции 'dplyr' в функциях, вы, скорее всего, захотите использовать« стандартную оценку ». Подробнее см. «Виньетка (« nse »)». – ialm
но почему функция? – MLavoie
Быстрое и грязное решение заключается в изменении 'select (LENGTH, WIDTH)%>%' to 'select (get (LENGTH), get (WIDTH))%>%'. Однако вы действительно должны использовать 'select _()' и 'mutate _()' в своих функциях. – ialm