阅读programming with dplyr指南,我可以一次引用所有...
个变量。但是我如何单独使用它们呢?
这是一个计算两个变量的函数。它使用quos()
和!!!
成功:
library(dplyr) # version 0.6 or higher
library(tidyr)
# counts two variables
my_fun <- function(dat, ...){
cols <- quos(...)
dat <- dat %>%
count(!!!cols)
dat
}
my_fun(mtcars, cyl, am)
#> # A tibble: 6 x 3
#> cyl am n
#> <dbl> <dbl> <int>
#> 1 4 0 3
#> 2 4 1 8
#> 3 6 0 4
#> 4 6 1 3
#> 5 8 0 12
#> 6 8 1 2
现在我想tidyr::spread
第二个变量,在本例中是am
列。当我添加到我的功能时:
result <- dat %>%
tidyr::spread(!!!cols[[2]], "n", fill = 0)
我明白了:
错误:列规范无效
我应该如何仅引用cols <- quos(...)
列表的第二个变量?
答案 0 :(得分:3)
目前尚不清楚spread
是否与quosure
一起使用。一个选项是将spread_
与字符串
my_fun <- function(dat, ...){
cols <- quos(...)
dat %>%
select(!!! cols) %>%
count(!!! cols) %>%
spread_(quo_name(cols[[2]]), "n", fill = 0)
}
my_fun(mtcars, cyl, am)
# A tibble: 3 x 3
# cyl `0` `1`
#* <dbl> <dbl> <dbl>
#1 4 3 8
#2 6 4 3
#3 8 12 2
答案 1 :(得分:1)
改为使用命名参数。如果您依赖于对...列表的不同元素执行不同的操作,那么只有明确才有意义,这样才能更容易理解每个输入正在做什么,并使您更容易操作