我正在使用一个具有函数的库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"
答案 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))