我有一个数据框:
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)
Run Code Online (Sandbox Code Playgroud)
我创建了一个这样的函数:
sel <- function(df, variable) {
var <- enquo(variable)
df2 <- select(df, starts_with(!!var))
return(df2)
}
Run Code Online (Sandbox Code Playgroud)
如何使用以下命令运行此功能:
sel(data, instrument)
Run Code Online (Sandbox Code Playgroud)
无需引用参数“instrument”。我需要它不被引用,因为这是一个更大的函数的一部分。如果我像上面那样运行它,我会得到:
Error in is_string(match) : object 'instrument' not found
Run Code Online (Sandbox Code Playgroud)
你正在寻找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)
Run Code Online (Sandbox Code Playgroud)
返回:
instrument1 instrument2
1 guitar guitar
2 bass bass
3 guitar guitar
4 drums drums
5 bass bass
6 drums drums
Run Code Online (Sandbox Code Playgroud)