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). Отказ К сожалению, в этом случае установка по умолчанию для типов к себе вызывает рекурсию в оценке. Попробуйте изменить имя либо параметра, либо внешний объект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top