I'm trying to put together a function that creates a subset from my original data frame, and then uses dplyr's SELECT and MUTATE to give me the number of large/small entries, based on the sum of the width and length of sepals/petals.
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))
}
Basically, I want the function to return the number of large flowers. However, when I run the function I get the following error -
filter("virginica", "Sepal.Length", "Sepal.Width")
Error: All select() inputs must resolve to integer column positions.
The following do not:
* LENGTH
* WIDTH
What am I doing wrong?
dplyrfunctions use non-standard evaluation. That is why you do not have to quote your variable names when you do something likeselect(mtcars, mpg), and whyselect(mtcars, "mpg")doesn't work. When you usedplyrin functions, you will likely want to use "standard evaluation". Seevignette("nse")for more details. - ialmselect(LENGTH, WIDTH) %>%toselect(get(LENGTH), get(WIDTH)) %>%. However, you should really be usingselect_()andmutate_()in your functions. - ialm