在具有公式的函数内调用时未找到对象

时间:2014-05-20 21:16:50

标签: r

我正在尝试从另一个接受公式作为参数的函数中调用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)

我从阅读中猜测这与我不理解的环境或承诺有关,但鉴于我不理解它们,我可能错了。

有任何快速解决方法吗?

2 个答案:

答案 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)

一切似乎都运行正常。所以这似乎是编写代码的人的错。您可以考虑与他们联系以提交错误报告。