R插入符替换列名称
R caret substitute column names
我想在 caret
包的 train
函数中替换一个列名。因此,我将目标变量的列名 target
替换为 eval(parse(text = paste0(targetname)))
。使用 randomForest 函数本身,我的代码有效。但是使用 train
会产生错误:
library(caret)
library(randomForest)
dat <- data.frame(target = c(2.5, 4.5, 6.1, 3.2, 2.2),
A = c(1.3, 4.4, 5.5, 6.7, 8.1),
B = c(44.5, 50.1, 23.7, 89.2, 10.5),
C = c("A", "A", "B", "B", "B"))
targetname <- "target"
set.seed(42)
model <- train(eval(parse(text = paste0(targetname))) ~ A + B + C,
data = dat,
method="rf",
ntree = 250,
metric= "RMSE")
此代码生成 Error in [.data.frame(data, , all.vars(Terms), drop = FALSE) : undefined columns selected
我可以写什么接受替代 targetname
的表达式来代替 eval(parse(text = paste0(targetname)))
?
你可以使用
formula(paste(targetname, " ~ A + B + C"))
# target ~ A + B + C
如
model <- train(formula(paste(targetname, " ~ A + B + C")),
data = dat,
method="rf",
ntree = 250,
metric= "RMSE")
我想在 caret
包的 train
函数中替换一个列名。因此,我将目标变量的列名 target
替换为 eval(parse(text = paste0(targetname)))
。使用 randomForest 函数本身,我的代码有效。但是使用 train
会产生错误:
library(caret)
library(randomForest)
dat <- data.frame(target = c(2.5, 4.5, 6.1, 3.2, 2.2),
A = c(1.3, 4.4, 5.5, 6.7, 8.1),
B = c(44.5, 50.1, 23.7, 89.2, 10.5),
C = c("A", "A", "B", "B", "B"))
targetname <- "target"
set.seed(42)
model <- train(eval(parse(text = paste0(targetname))) ~ A + B + C,
data = dat,
method="rf",
ntree = 250,
metric= "RMSE")
此代码生成 Error in [.data.frame(data, , all.vars(Terms), drop = FALSE) : undefined columns selected
我可以写什么接受替代 targetname
的表达式来代替 eval(parse(text = paste0(targetname)))
?
你可以使用
formula(paste(targetname, " ~ A + B + C"))
# target ~ A + B + C
如
model <- train(formula(paste(targetname, " ~ A + B + C")),
data = dat,
method="rf",
ntree = 250,
metric= "RMSE")