Mam wiele funkcji przekazywania argumentów, które mogą nie być dostępne.R leniwy paradoks oceny (błąd R?)
np. Mam
mainfunction <- function(somearg) {
mytest(somearg)
fun <- function() { subfunction(somearg) }
fun()
}
z interesującym aspektem że jedyna interakcja mytest(somearg)
z arg jest to, że sprawdza, czy argument nie brakuje:
mytest = function(somearg) {
print(missing(somearg))
}
subfunction
następnie ponownie testuje jeśli brakuje i traktuje to odpowiednio:
subfunction = function(somearg) {
if (missing(somearg))
somearg = NULL
else
somearg = matrix(somearg, cols = 2)
# somearg is used here…
}
kicker jest to, że z somearg
brakuje, to nie działa: matrix(somearg, cols = 2)
rzuca
argument "somearg" brakuje, bez domyślnie
podczas debugowania, znalazłem następujące:
- na początku
mainfunction
,missing(somearg)
powracaTRUE
- w
mytest
,missing(somearg)
zwracaTRUE
- w
subfunction
,missing(somearg)
powracaFALSE
(!!!!)
dlatego matrix
oddział jest trafiony, ale w rzeczywistości jestsomearg
brakuje, więc to się nie powiedzie ...
wat.
Zgaduję problem polega na tym, że nie nazywasz bezpośrednio podfunkcji, lecz raczej z funkcji zagnieżdżonej, która tworzy zamknięcie nad argumentem 'somearg'. Wydaje się, że zamknięcia nie mogą traktować brakujących argumentów. Nie jestem pewien, czy jest to błąd, czy "od samego początku": wewnątrz 'fun',' somearg' jest ** nie ** argumentem, jest to normalna zmienna, a więc nie może jej brakować. –
Zobacz dokumentację: "Obecnie' missing' missing "może być użyte tylko w bezpośrednim ciele funkcji, która definiuje argument, a nie w ciele funkcji zagnieżdżonej lub' local' call. " – Roland
z "może być użyty", co oznacza "zachowuje się zupełnie nieoczekiwanie inaczej". cholerny. dzięki. –