我有一个数据框:
data <- data.frame(
name = c("John", "Paul", "George", "Ringo", "Stuart", "Pete"),
instrument1 = c("guitar", "bass", "guitar", "drums", "bass","drums"),
instrument2 = c("guitar", "bass", "guitar", "drums", "bass","drums"),stringsAsFactors=FALSE)
然后我创建一个像这样的函数:
sel <- function(df, variable) {
var <- enquo(variable)
df2 <- select(df, starts_with(!!var))
return(df2)
}
如何使用以下命令运行此功能:
sel(data, instrument)
无需引用参数“仪器”。我需要不加报价,因为这是更大功能的一部分。如果我像上面那样烂了,我得到:
Error in is_string(match) : object 'instrument' not found
答案 0 :(得分:2)
您正在寻找deparse(substitute(x))
的魔力!它将返回您以字符串形式传递的参数名称。
data <- data.frame(
name = c("John", "Paul", "George", "Ringo", "Stuart", "Pete"),
instrument1 = c("guitar", "bass", "guitar", "drums", "bass","drums"),
instrument2 = c("guitar", "bass", "guitar", "drums", "bass","drums"),stringsAsFactors=FALSE)
sel <- function(df, variable) {
var <- deparse(substitute(variable))
df2 <- select(df, starts_with(!!var))
return(df2)
}
sel(data, instrument)
哪个返回:
instrument1 instrument2
1 guitar guitar
2 bass bass
3 guitar guitar
4 drums drums
5 bass bass
6 drums drums
答案 1 :(得分:1)
我们可以使用rlang::enexpr
将variable
转换为名称类,然后使用as.character
将其更改为字符,并将其作为参数传递给starts_with
。
sel <- function(df, variable) {
var <- as.character(rlang::enexpr(variable))
df2 <- dplyr::select(df, starts_with(var))
return(df2)
}
sel(data, instrument)
# instrument1 instrument2
#1 guitar guitar
#2 bass bass
#3 guitar guitar
#4 drums drums
#5 bass bass
#6 drums drums