I am writing my function and want to use dplyr's filter() function to select rows of my data frame that satisfy a condition. This is my code:
library(tidyverse)
df <-data.frame(x = sample(1:100, 50), y = rnorm(50), z = sample(1:100,50), w = sample(1:100, 50),
p = sample(1:100,50))
new <- function(ang,brad,drau){
df%>%filter(!!drau %in% 1:50)%>%select(ang,brad) -> A
return(A)
}
brand <- c("z","w","p")
lapply(1:3, function(i) new(ang = "x", brad = "y", drau = brand[i]))%>%bind_rows()
Anytime I run this function, it looks like filter
doesn't select any rows that satisfy the condition.
How can I make this work?
Update
For some reason, this works when I don't use `%in%, as in;
new <- function(ang,brad,drau){
df%>%filter(!!drau > 50)%>%select(ang,brad) -> A
return(A)
}
lapply(1:3, function(i) new(ang = "x", brad = "y", drau = brand[i]))%>%bind_rows()
However, the results are the same for every loop. Why is this so? and also why can't I use %in%
.
I agree with @hrbrmstr's standard evaluation solution. As suggested by @hadley today here's NSE solution:
This appears to do what you want (but it needs confirmation by you):
Despite there being a plethora of "official" "tidyverse" examples using
df
, it's a function in thestats
pkg and I try to avoid using it anymore.Since you're using the tidyverse, might as well take advantage of
map_df()
frompurrr
.