2011-11-01 10 views
38

mam funkcji f że dwa parametry (p1 i p2):badania, jeżeli argument funkcji znajduje się, czy nie w R

przypadku parametru p2 wartość nie była przekazywana do funkcji wartości z p1^2 należy użyć zamiast tego. Ale jak mogę dowiedzieć się w ramach funkcji, czy podana jest wartość, czy nie. Problem polega na tym, że zmienna p2 nie została zainicjalizowana, jeśli nie było żadnej wartości. Dlatego nie mogę przetestować pod kątem p2 jako NULL.

f <- function(p1, p2) { 
    if(is.null(p2)) { 
     p2=p1^2 
    } 
    p1-p2 
} 

Czy jest jakiś sposób można sprawdzić, czy wartość dla p2 został przekazany do funkcji czy nie? (Nie mogłem znaleźć funkcji ani podobnych rzeczy.)

Odpowiedz

46

Do tego celu służy funkcja missing().

Alternatywnie można domyślnie ustawić wartość parametru p2 na wartość NULL. Czasami wolę takie rozwiązanie, ponieważ pozwala przekazywać argumenty do funkcji zagnieżdżonych.

f <- function(p1, p2=NULL) { 
    if(is.null(p2)) { 
     p2=p1^2 
    } 
    p1-p2 
} 

f.wrapper <-function(p1,p2=NULL){ 
    p1 <- 2*p1 
    f(p1,p2) 
} 
> f.wrapper(1) 
[1] -2 
> f.wrapper(1,3) 
[1] -1 

EDIT: można to zrobić technicznie z missing() także, ale wtedy trzeba by zawierać missing() oświadczenie w f.wrapper również.

+1

+1 dla 'NULL' domyślnej alternatywy. Odp: EDIT, którą dodałeś, jak byś przekazał 'missing''ness poprzez funkcję wrappera? –

+0

@ JoshO'Brien Podanie 'missing'-ness on jest skomplikowane AFAIK - ale możliwe. Dlatego "NULL" jest o wiele łatwiejszy w tym przypadku. – Tommy

+0

... Tak więc może być uzasadnione oddzielne pytanie o zdanie "brakującego". – Tommy

7

Myślę, że "? Brakujący? Powinien to zrobić.

Powiązane problemy