r機能でサブセットを使用している場合、既に評価中のエラーの約束

StackOverflow https://stackoverflow.com/questions/3073746

  •  28-09-2019
  •  | 
  •  

質問

次の関数を実行すると、奇妙なエラーが発生します。

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のデフォルトをそれ自体に設定すると、評価に再帰が発生します。パラメーターまたは外側のオブジェクトのいずれかの名前を変更してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top