We can make use of the quosures from the devel version of dplyr (soon to be released 0.6.0) for creating the function
f.sample <- function(dat, colN, value, perc){ colN <- enquo(colN) value <- quo_name(enquo(value)) dat %>% filter(UQ(colN) == UQ(value)) %>% sample_frac(perc) %>% droplevels } f.sample(iris, Species, versicolor, 0.8) f.sample(iris, Species, virginica, 0.2) #Sepal.Length Sepal.Width Petal.Length Petal.Width Species #20 6.0 2.2 5.0 1.5 virginica #9 6.7 2.5 5.8 1.8 virginica #15 5.8 2.8 5.1 2.4 virginica #10 7.2 3.6 6.1 2.5 virginica #12 6.4 2.7 5.3 1.9 virginica #49 6.2 3.4 5.4 2.3 virginica #22 5.6 2.8 4.9 2.0 virginica #34 6.3 2.8 5.1 1.5 virginica #2 5.8 2.7 5.1 1.9 virginica #44 6.8 3.2 5.9 2.3 virginica The enquo does similar functionality as substitute by taking the input arguments and convert it to quosure, while quo_name convert to string, and within the filter/group_by/summarise/mutate the quosures are evaluated by unquoting (!! or UQ)