我目前正在研究旨在对经验数据进行建模的用户定义函数,并且在传递给该函数的对象/参数方面遇到问题:
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在该函数中不起作用,在此之前它也起作用。
答案 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