【问题标题】:R error promise already under evaluation when using subset in function but no error in script在函数中使用子集但脚本中没有错误时,R 错误承诺已经在评估中
【发布时间】:2011-03-05 15:55:12
【问题描述】:

我在运行以下函数时遇到了一个奇怪的错误:

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 行上。我似乎无法调试它,因为如果我改为在解释器中运行函数的每一行,我将不再收到错误。什么给了?

【问题讨论】:

  • 你为什么要故意编写这样的代码,其中参数名称与参数名称相同?这只是一种糟糕的风格。

标签: r subset dataframe


【解决方案1】:

这是您对TypeIDs 的递归使用。要记住的是,函数参数是惰性求值的,它允许像function(foo, bar = foo) 这样很酷的东西。不幸的是,在这种情况下,将 TypeID 的默认值设置为自身会导致评估中的递归。尝试更改参数或外部对象的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 2017-09-20
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多