[英]Passing objects to functions
我目前正在开发旨在对经验数据进行建模的用户定义函数,但是传递给该函数的对象/参数存在问题:
bestModel <- function(k=4L, R2=0.994){
print(k) # here, everything is still fine
lmX <- mixlm::lm(getLinearModelFunction(k), data)
best <- mixlm::best.subsets(lmX, nbest=1)
.
.
.
}
最初,一切都按预期工作,但是一旦我想将参数k
传递给另一个用户定义的函数getLinearModelFunction()
,就会引发错误:
Error in getLinearModelFunction(k) : object 'k' not found
如果我要分配一个新参数(例如l <- k
并尝试将其传递,那将无济于事。 该参数似乎不适用于其他功能。 我不仅遇到了原始数据类型,还遇到了复杂的结构。 在命令行上,只要对象在我的工作空间中,一切都可以工作。
概括起来:传递参数仅在该函数内起作用,但是从此以后调用其他函数会导致错误。 为什么? 并且:该怎么办?
编辑:在尝试解决问题时,它真的很奇怪。 我剥离了所有功能:
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"))
}
}
假设,我们有一个data.frame d,其中包含raw,L1,L2,L3,L4变量...只要在最前面添加注释#,它就可以工作。 删除函数后,立即调用functionA(d,3)
Error in functionB(k) : object 'k' not found
即使k在该函数中不起作用,在此之前它仍然起作用。
好的,的确,这是环境问题。 解决方案是获取当前环境并从那里获取对象:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.