2015-06-28 10 views
7

Biorąc pod uwagę funkcję f() następująco:Jak przetestować istnienie zmiennej w środowisku funkcji?

f = function(a) { 
    if(a > 0) b = 2 
    c = exists('b') 
    return(c) 
} 

Jak mogę określić, że funkcja exists() należy szukać tylko w obrębie funkcji f?

z pustym środowiska, nazywając f(-5) powróci FALSE jak chciałbym, ale jeśli to zrobię

b = "hello" 
f(-5) 

potem dostać TRUE. Jak uzyskać f(-5) do zwrócenia FALSE, nawet jeśli użytkownik ma b zdefiniowane gdzie indziej w swoim skrypcie poza funkcją f?

Oczekuję, że ma to coś wspólnego z parametrem where z exists(), ale nie mogę określić, jakie jest odpowiednie środowisko do wywoływania tego parametru. Wciąż nie owinąłem głowy w pełni otoczeniem w R ...

Dzięki!

Odpowiedz

10

Po prostu użyj parametru o numerze inherits=. Zobacz stronę pomocy ?exists, aby uzyskać więcej informacji:

b <- 100 
f <- function(a) { 
    if(a > 0) b <- 2 
    c <- exists('b', inherits=FALSE) 
    return(c) 
} 
f(5) 
# [1] TRUE 
f(-5) 
# [1] FALSE 
+1

Gosh: RTFM znów wygrywa! :-) –

Powiązane problemy