R错误承诺在使用函数中使用子集时已经在评估中,但脚本中没有错误
题
运行以下功能时,我会遇到一个奇怪的错误:
TypeIDs=c(18283,18284,17119,17121,17123,17125,17127,17129,17131,17133,18367,18369,18371,18373,18375,18377,18379)
featsave<-function(featfile,TypeIDs=TypeIDs) {
mydata1<-read.table(featfile,header=TRUE)
mydata2<-subset(mydata1,TypeID %in% TypeIDs)
mydata<-as.data.frame(cast(mydata2, Feat1 + Feat2 + ID ~ TypeID,value="value"))
save(mydata,file="mydatafile.Rdata",compress=TRUE)
return(mydata)
}
使用以下数据:
Feat1 Feat2 ID Feat3 Feat4 TypeID value
1 1 1 6 266 18283 280.00
1 1 1 6 266 18284 20.00
1 1 1 6 266 18285 0.00
1 1 1 6 266 17116 0.00
1 1 1 6 266 17117 0.00
1 1 1 6 266 17118 0.00
1 1 1 6 266 17119 68.75
1 1 1 6 266 17120 0.00
1 1 1 6 266 17121 1.26
我得到的错误是:
Error in inherits(x, "factor") :
promise already under evaluation: recursive default argument reference or earlier problems?
此错误发生在 mydata2
在我获取数据子集的位置。我似乎无法调试它,因为如果我在解释器中运行函数的每一行,我将不再出现错误。是什么赋予了?
解决方案
这是您的递归使用 TypeIDs
. 。要记住的事情是,对函数论证进行了懒惰的评估,它允许像 function(foo, bar = foo)
. 。不幸的是,在这种情况下,设定TypeID本身的默认值会导致评估中的递归。尝试更改参数或外对象的名称。
不隶属于 StackOverflow