Обещание ошибки R уже оценивается при использовании подмножества в функции, но нет ошибки в скрипте - PullRequest
1 голос
/ 19 июня 2010

Я получаю странную ошибку при запуске следующей функции:

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 Ответ

7 голосов
/ 19 июня 2010

Это ваше рекурсивное использование TypeIDs.Следует помнить, что аргументы функции вычисляются лениво, что позволяет использовать такие классные вещи, как function(foo, bar = foo).К сожалению, в этом случае установка значения по умолчанию для TypeID само по себе вызывает рекурсию в оценке.Попробуйте изменить имя параметра или внешнего объекта.

...