如何在同一函数中传递变量名(即 var_x)或变量转换(即 as.factor(var_x))?

How to pass on variable names (i.e. var_x) OR transformation of variables (i.e. as.factor(var_x)) in same function?

在 ggplot 中,我们可以轻松地在代码中输入数据帧的变量名,即

df <- data.frame(a=1:10, b= 1:10, c= 1:10)
ggplot(df, aes(a, b, col= c)) + geom_point()

或者我们可以在代码内部转换变量,即在这里我们将颜色变量 c 更改为一个因子:

ggplot(df, aes(a, b, col= as.factor(c))) + geom_point()

我希望我的函数也这样做。所以如果我的函数是

my_fun <- function(data, var){
  var <- deparse(substitute(var))
  class(data[ , var])
}

我想要 my_fun(df, a) 到 return numeric,另一方面,my_fun(df, as.factor(a)) 必须 return factor。我们怎样才能做到这一点?

试试这些。

my_fun1 <- function(data, x) eval(substitute(x), data)

my_fun2 <- function(data, ...) with(data, ...)

my_fun3 <- with

例如(其他人也一样)

my_fun1(BOD, Time) # returns numeric object
## [1] 1 2 3 4 5 7

my_fun1(BOD, factor(Time))  # returns factor object
## [1] 1 2 3 4 5 7
## Levels: 1 2 3 4 5 7