我正在尝试从另一个接受公式作为参数的函数中调用checkm函数。我收到一个找不到对象的错误。这是最小的实现和错误。
library(lrmest)
data(pcd)
form<-formula(Y~X1+X2+X3+X4)
checkm(form,data=pcd)
Wrap<-function(f){
checkm(f,data=pcd)
}
Wrap(form)
错误是:
Error in model.frame(formula = f, data = pcd, NULL) :
object 'f' not found
Called from: eval(expr, envir, enclos)
我从阅读中猜测这与我不理解的环境或承诺有关,但鉴于我不理解它们,我可能错了。
有任何快速解决方法吗?
答案 0 :(得分:2)
一个快速解决方法是更改公式参数的名称。它恰好与eval(cal)
内的checkm
电话冲突。我怀疑@joran是对的,这不是你的错。这有效:
library(lrmest)
data(pcd)
form<-Y~X1+X2+X3+X4
checkm(form,data=pcd)
Wrap<-function(formula){
checkm(formula,data=pcd)
}
Wrap(form)
答案 1 :(得分:1)
正如@joran所指出的那样,由于没有使用正确的帧来评估命令而导致函数出现错误/错误。如果您为checkm
换出lm
,您会发现它运行得很好。您可以使用
checkm2<-checkm
body(checkm2)[[6]]<-quote(cal <- eval(cal, parent.frame()))
然后运行
library(lrmest)
data(pcd)
form<-formula(Y~X1+X2+X3+X4)
checkm2(form,data=pcd)
Wrap<-function(f){
checkm2(f,data=pcd)
}
Wrap(form)
一切似乎都运行正常。所以这似乎是编写代码的人的错。您可以考虑与他们联系以提交错误报告。