【问题标题】:R caret substitute column names [duplicate]R插入符号替换列名[重复]
【发布时间】:2019-01-09 01:07:28
【问题描述】:

我想在caret 包的train 函数中替换一个列名。因此,我用eval(parse(text = paste0(targetname))) 替换了目标变量target 的列名。使用 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)))

【问题讨论】:

    标签: r r-caret substitution


    【解决方案1】:

    你可以使用

    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")
    

    【讨论】:

    • 好的,谢谢,这行得通!
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多