2010-06-18 50 views
1

我得到一個奇怪的錯誤沒有錯誤時,已經在評估當我運行以下功能:半徑誤差承諾使用功能子集,但在劇本

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線會出現此錯誤在哪裏採取一部分數據。我似乎無法調試它,因爲如果我在解釋器中運行函數的每一行,我不會再出現錯誤。是什麼賦予了?

+1

爲什麼你會故意寫這樣的代碼,其中參數名稱與參數名稱相同?這只是簡單的壞風格。 – 2010-06-19 07:51:16

回答

6

這是您的遞歸使用TypeIDs。需要記住的是函數參數是懶惰評估的,它允許像function(foo, bar = foo)這樣的很酷的東西。不幸的是,在這種情況下,將TypeID的默認設置爲其自身會導致評估中的遞歸。嘗試更改參數或外部對象的名稱。

+0

太好了。非常感謝! – fideli 2010-06-19 01:03:25