为什么在 R 中的 model.matrix() 中无法识别数据?

why data not recognized in model.matrix() in R?

我想知道为什么在下面的函数中,我使用基础 R 数据集 CO2 并将 Plant 作为其数据列之一,但出现以下错误:

Error in eval(predvars, data, env) : object 'Plant' not found

如何解决这个问题?

pc <- function(data, ref.variable){

as.data.frame(model.matrix(ref.variable ~ ., data = data))
}

pc(data = CO2, ref.variable = Plant) # Gives Error

## NOTE: it works OK this way: model.matrix(Plant ~ ., data = CO2)

我们需要 paste 然后用 formula

换行
pc <- function(data, ref.variable){

     as.data.frame(model.matrix(formula(paste0(ref.variable,  "~ .")), data = data))
 }

res <- pc(data = CO2, ref.variable = "Plant") 
head(res)
#  (Intercept) TypeMississippi Treatmentchilled conc uptake
#1           1               0                0   95   16.0
#2           1               0                0  175   30.4
#3           1               0                0  250   34.8
#4           1               0                0  350   37.2
#5           1               0                0  500   35.3
#6           1               0                0  675   39.2

如果我们需要将 ref.variable 作为未引号传递,则在函数

中使用 substitute
pc <- function(data, ref.variable){

  ref.variable <- substitute(ref.variable)

 as.data.frame(model.matrix(formula(paste0(ref.variable,  "~ .")), data = data))
 }

pc(data = CO2, ref.variable = Plant)