将参数作为承诺传递给使用双括号的其他函数
passing argument as promise to other function that uses double brace
我熟悉 embrace dplyr syntax,它允许将未加引号的变量名称作为参数动态传递给函数。例如定义
后
library(dplyr)
pull_column <- function(tb, colname) {
tb %>%
pull({{colname}})
}
可以通过 运行
从 starwars
小标题中拉出例如 name
列
starwars %>% pull_column(name)
我的目标是创建另一个函数,它也接受一个 colname
参数,然后使用提供的值作为参数转发给 pull_column()
函数。例如,这个函数首先按眼睛颜色过滤,然后调用 pull_column()
:
pull_column_for_eyecolor <- function(tb, colname, eyecolor){
tb %>%
filter(eye_color == eyecolor) %>%
pull_column(colname)
}
然而,当我调用此函数以通过
获取 yellow-eyed 个字符的名称时
starwars %>% pull_column_for_eyecolor(name, "yellow")
我明白了
Error: object 'name' not found
有没有办法为 pull_column()
和 pull_column_for_eyecolor()
函数的 colname
参数提供一个不带引号的值,而不会 运行 出错?
将您的 pull_column_for_eyecolor
函数写成
pull_column_for_eyecolor <- function(tb, colname, eyecolor){
qColName <- enquo(colname)
tb %>%
filter(eye_color == eyecolor) %>%
pull_column(!! qColName)
}
所以
starwars %>% pull_column_for_eyecolor(name, "yellow")
[1] "C-3PO" "Darth Vader" "Palpatine" "Watto" "Darth Maul" "Dud Bolt" "Ki-Adi-Mundi" "Yarael Poof" "Poggle the Lesser"
[10] "Zam Wesell" "Dexter Jettster"
有关详细信息,请参阅 here。这是一个经典的non-standard评估问题。
我熟悉 embrace dplyr syntax,它允许将未加引号的变量名称作为参数动态传递给函数。例如定义
后library(dplyr)
pull_column <- function(tb, colname) {
tb %>%
pull({{colname}})
}
可以通过 运行
从starwars
小标题中拉出例如 name
列
starwars %>% pull_column(name)
我的目标是创建另一个函数,它也接受一个 colname
参数,然后使用提供的值作为参数转发给 pull_column()
函数。例如,这个函数首先按眼睛颜色过滤,然后调用 pull_column()
:
pull_column_for_eyecolor <- function(tb, colname, eyecolor){
tb %>%
filter(eye_color == eyecolor) %>%
pull_column(colname)
}
然而,当我调用此函数以通过
获取 yellow-eyed 个字符的名称时starwars %>% pull_column_for_eyecolor(name, "yellow")
我明白了
Error: object 'name' not found
有没有办法为 pull_column()
和 pull_column_for_eyecolor()
函数的 colname
参数提供一个不带引号的值,而不会 运行 出错?
将您的 pull_column_for_eyecolor
函数写成
pull_column_for_eyecolor <- function(tb, colname, eyecolor){
qColName <- enquo(colname)
tb %>%
filter(eye_color == eyecolor) %>%
pull_column(!! qColName)
}
所以
starwars %>% pull_column_for_eyecolor(name, "yellow")
[1] "C-3PO" "Darth Vader" "Palpatine" "Watto" "Darth Maul" "Dud Bolt" "Ki-Adi-Mundi" "Yarael Poof" "Poggle the Lesser"
[10] "Zam Wesell" "Dexter Jettster"
有关详细信息,请参阅 here。这是一个经典的non-standard评估问题。