【发布时间】:2018-07-14 12:12:50
【问题描述】:
我目前正在研究旨在建模经验数据的用户定义函数,但我在传递给函数的对象/参数方面遇到问题:
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
如果我要分配一个新参数,例如,它没有帮助。 G。 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 ... 只要在 best 之前有注释 #,它就可以工作。一旦它被删除,调用 functionA(d, 3) 会导致
Error in functionB(k) : object 'k' not found
尽管 k 在该函数中没有发挥作用,但在此之前,它起作用了。
【问题讨论】:
-
getLinearModelFunction在您自己调用它时是否按预期工作?从bestModel函数中调用自定义函数(使用参数k)没有问题。 -
也许您可以尝试将
k替换为eval(parse(text = k)以使内部函数与所需的对象/内容一起工作。 -
非常感谢 cmets。当直接从命令行调用时,getLinearModelFunction 运行良好。 eval(parse... 不能解决问题。所有用户定义的函数都存在于工作区中。顺便说一句:我使用 RStudio,它们显示在全局环境中。是否有不同的环境?
-
错误来自
getLinearModelFunction,而不是bestModel,我们不知道该函数包含什么,因为问题没有包含它,但它在某处包含对k的引用没有定义k。 -
getLinearModelFunction 非常简单:
# 根据k生成线性回归模型函数 getLinearModelFunction 6){ message("参数 k 超出范围;设置为 6") k
标签: r