将对象传递给函数

时间:2018-07-14 12:12:51

标签: r

我目前正在研究旨在对经验数据进行建模的用户定义函数,并且在传递给该函数的对象/参数方面遇到问题:

k

起初,一切都按预期工作,但是只要我想将参数getLinearModelFunction()传递给另一个用户定义的函数Error in getLinearModelFunction(k) : object 'k' not found ,就会引发错误:

l <- k

如果我分配了一个新参数,则没有帮助。 G。 functionA <- function(data, k){ lmX <- mixlm::lm(functionB(k), data) summary(lmX) # best <- mixlm::best.subsets(lmX,nbest=1) } functionB <- function(k=4){ if(k==1){ return(formula("raw ~ L1")) }else if(k==2){ return(formula("raw ~ L1 + L2")) }else if(k==3){ return(formula("raw ~ L1 + L2 + L3 ")) }else if(k==4){ return(formula("raw ~ L1 + L2 + L3 + L4")) } } ,并尝试将其继续下去。该参数似乎不适用于其他功能。我不仅遇到了原始数据类型,还遇到了复杂的结构。在命令行上,只要对象在我的工作空间中就可以正常工作。

总结:传递参数仅在该函数内起作用,但是从此以后调用其他函数会导致错误。为什么?并且:该怎么办?

编辑: 在尝试解决问题时,它变得很奇怪。我删除了所有功能:

Error in functionB(k) : object 'k' not found  

比方说,我们有一个data.frame d,其中包含变量raw,L1,L2,L3,L4 ... ...只要有注释#最好,它就会起作用。删除函数后,调用functionA(d,3)会导致

{{1}}

即使k在该函数中不起作用,在此之前它也起作用。

1 个答案:

答案 0 :(得分:0)

好的,确实,这是环境问题。解决方案是获取当前环境并从那里获取对象:

functionA <- function(data, k){
   e <- environment()
   lmX <- mixlm::lm(functionB(e$k), e$data)
   summary(lmX)

   best <- mixlm::best.subsets(lmX,nbest=1)
 }

当直接使用are包时,这通常不是问题。这些对象通常位于全局环境中。使用功能时,每个功能都有其自己的环境。在开始学习打包代码时,我设法解决了这一问题:http://adv-r.had.co.nz/Environments.html

相关问题