3

我正在使用一个具有函数 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"
4

2 回答 2

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

于 2013-09-22T01:28:25.200 回答
1

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

To.Eval <- paste("partialPlot(r, x, '", 
                  g, 
                  "')", 
                  sep = "")
L <- eval(parse(text = To.Eval))
于 2018-11-16T19:43:18.027 回答