在randomForest包的partialPlot中使用变量名作为参数

时间:2013-09-22 00:55:06

标签: r random-forest

我正在使用一个具有函数的库f。此函数接受一些参数:对象,数据框和数据框中列的名称。如果我手动调用它,它可以正常工作。我称之为:

f(my_object, my_dataframe, 'A')

但是,如果我在变量中加上“A”,它就不起作用了!为了澄清,我只是这样做:

g = 'A'    
f(my_object, my_dataframe, g)

我收到错误(选择了未定义的列)。我试过用谷歌搜索来解决这个问题,但没有运气。如果有人能提供帮助,我会非常感激。


编辑:我在randomForest库中使用partialPlot命令。这正是我正在输入的内容:

partialPlot(r,x,'pH')

这个有效!接下来,我将'pH'分配给变量并尝试完全相同的函数:

g = 'pH'    
partialPlot(r,x,g)

这不起作用,我收到以下错误:

Error in '[.data.frame'(pred.data, , xname) : undefined columns selected

我还可以验证g是我认为的:

print(g)
#[1] "pH"

class(g)
#[1] "character"

2 个答案:

答案 0 :(得分:3)

尝试

g = quote(pH)
partialPlot(r,x,g)

罪魁祸首是randomForest ::: partialPlot.randomForest中的以下作品

x.var <- substitute(x.var)
xname <- if (is.character(x.var)) 
    x.var
else {
    if (is.name(x.var)) 
        deparse(x.var)
    else {
        eval(x.var)
    }
}

有关更多背景信息,请参阅stackoverflow.com/q/9860090/1201032


早期尝试(仅以交互方式工作):

partialPlot(r,x,c(g))应该有效。写c(g)代替g会使is.name(x.var)返回FALSE,因此eval代替deparse执行。

答案 1 :(得分:0)

我自己遇到了这个问题。这是一个麻烦的解决方案,但对我有用。使用eval()被认为是不好的编程,但是partialPlot中的错误是如此令人难以置信,我认为绝望的时代需要绝望的措施!

To.Eval <- paste("partialPlot(r, x, '", 
                  g, 
                  "')", 
                  sep = "")
L <- eval(parse(text = To.Eval))