问题与此类似:
Pass a data.frame column name to a function
我有一个功能:
optimal_cutpoint <- function(data, ..., choice){
selection <- dplyr::select(data, ...)
choice <- data[[choice]]
# do something with those two objects
}
该功能我将使用以下方式:
choicedata <- data.frame(PTV.A = c(0, 10, 5, 4, 7, 1, 2, 0, 0, 10),
PTV.B = c(5, 0, 1, 10, 6, 7, 10, 9, 5, 0),
PTV.C = c(10, 5, 10, 5, 2, 8, 0, 5, 5, 0),
VOTE = c("C", "A", "C", "B", "B", "C", "B","B", "B", "A"))
optimal_cutpoint(choicedata, PTV.A:PTV.C, choice = "VOTE")
现在是我的问题。使用...,我可以写不带引号的变量名。我可以不用引号写出“ VOTE”吗?我更愿意在函数中不加引号的方式编写它。
如果我使用dplyr :: select,它将搜索选项而不是投票。
dplyr::select(data,choice)
答案 0 :(得分:5)
添加标记为##
的行optimal_cutpoint <- function(data, ..., choice){
selection <- dplyr::select(data, ...)
choice <- deparse(substitute(choice)) ##
choice <- data[[choice]]
# do something with those two objects
}
out <- optimal_cutpoint(choicedata, PTV.A:PTV.C, choice = VOTE)
out
## [1] C A C B B C B B B A
## Levels: A B C
答案 1 :(得分:2)
这正是目的所在,有关更多信息,请参见here。奖励引用pull
,基本上等于[[
的dplyr。
optimal_cutpoint <- function(data, ..., choice){
choice_quo = enquo(choice)
selection <- dplyr::select(data, ...)
choice <-dplyr::pull(data, !!choice_quo)
# do something with those two objects
}
令我惊讶的是,...
中的未引用参数使事情自动进行,我从未尝试过。
编辑,对quo
和enquo
进行了一些额外的说明,因为我在原始答案中犯了这个错误。如果直接使用不带引号的值,请使用quo
;如果要将不带引号的参数的值解释为函数,请使用enquo
。比较
data(iris)
myvar = quo(Species)
select(iris, !!myvar)
到
myfun = function(d, myvar) {
quovar = enquo(myvar)
select(iris, !!quovar)
}
myfun(iris, Species)