R Fehler versprechen bereits unter Auswertung, wenn Teilmenge in Funktion, aber keine Fehler in Skript

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

  •  28-09-2019
  •  | 
  •  

Frage

Ich erhalte eine seltsame Fehlermeldung, wenn ich die folgende Funktion ausführen:

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)
}

mit den folgenden Daten:

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

Der Fehler ich erhalte, ist:

Error in inherits(x, "factor") : 
  promise already under evaluation: recursive default argument reference or earlier problems?

Dieser Fehler tritt auf der mydata2 Linie, wo ich eine Teilmenge der Daten übernehmen. Ich kann es nicht zu debuggen scheine, weil, wenn ich stattdessen jede Zeile der Funktion in dem Interpreter ausgeführt, ich nicht mehr die Fehler. Was soll das?

War es hilfreich?

Lösung

Es ist Ihre rekursive Verwendung von TypeIDs. Das ist daran zu erinnern ist, dass Funktionsargumente lazily ausgewertet werden, die coolen Sachen wie function(foo, bar = foo) erlaubt. Leider gibt es in diesem Fall die Standardeinstellung für TypeIDs an sich selbst Einstellung bewirkt eine Rekursion in der Auswertung. Versuchen Sie, den Namen entweder den Parameter oder dem äußeren Objekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top