Ich habe mehrere Funktionen übergeben Argumente, die möglicherweise fehlen.R Lazy Evaluation Paradox (R-Fehler?)
z.B. Ich habe
mainfunction <- function(somearg) {
mytest(somearg)
fun <- function() { subfunction(somearg) }
fun()
}
mit dem interessanten Aspekt, dass die einzige Interaktion von mytest(somearg)
mit dem arg ist, dass es prüft, ob das Argument fehlt nicht:
mytest = function(somearg) {
print(missing(somearg))
}
subfunction
testet dann wieder, wenn es fehlt und Leckereien dementsprechend es:
subfunction = function(somearg) {
if (missing(somearg))
somearg = NULL
else
somearg = matrix(somearg, cols = 2)
# somearg is used here…
}
der Kicker ist, dass mit somearg
fehlt, das nicht funktioniert: matrix(somearg, cols = 2)
fehlt
Argument "somearg" wirft, ohne Standard
während der Fehlersuche, fand ich folgendes:
- zu Beginn der
mainfunction
,missing(somearg)
kehrtTRUE
- in
mytest
,missing(somearg)
liefertTRUE
- in
subfunction
,missing(somearg)
kehrtFALSE
(!!!!)
daher die matrix
Zweig getroffen wird, aber in Wirklichkeit somearg
ist fehlt, so scheitert es ...
wat.
Ich vermute dass das Problem hier darin besteht, dass Sie die Unterfunktion nicht direkt aufrufen, sondern von einer verschachtelten Funktion, die eine Schließung erzeugt über das Argument 'Somearg'. Es scheint, dass Schließungen fehlende Argumente nicht behandeln können. Ich bin mir nicht sicher, ob das ein Fehler oder "von Design" ist: Innerhalb 'Spaß',' Somearg' ist ** nicht ** ein Argument, es ist eine normale Variable und kann daher nicht fehlen. –
Siehe die Dokumentation: "Derzeit kann' missing' nur im unmittelbaren Hauptteil der Funktion verwendet werden, die das Argument definiert, nicht im Rumpf einer verschachtelten Funktion oder eines 'lokalen' Aufrufs." – Roland
mit "kann nur verwendet werden" bedeutet "es wird sich sonst völlig unerwartet verhalten". Verdammt. Vielen Dank. –