首页 文章

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

提问于
浏览
0

我试图从另一个接受公式作为参数的函数中调用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 回答

  • 1

    一个快速解决方法是更改公式参数的名称 . 它恰好与 checkm 内的 eval(cal) 调用冲突 . 我怀疑@joran是对的,这不是你的错 . 这有效:

    library(lrmest)
    data(pcd)
    form<-Y~X1+X2+X3+X4
    checkm(form,data=pcd)
    
    
    Wrap<-function(formula){
      checkm(formula,data=pcd)
    }
    
    Wrap(form)
    
  • 2

    正如@joran指出的那样,由于没有使用正确的帧来评估命令,导致函数出现错误/错误 . 如果换出 checkmlm ,你会发现它运行得很好 . 您可以创建自己的函数,只更改一行代码

    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)
    

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

相关问题