2015-06-28 8 views
7

data la funzione f() come segue:Come si verifica l'esistenza di una variabile all'interno dell'ambiente di una funzione?

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

Come faccio a specificare che la funzione exists() deve cercare solo all'interno della funzione f?

Con un ambiente vuoto, chiamando f(-5) tornerà FALSE come vorrei, ma se lo faccio

b = "hello" 
f(-5) 

poi ho ottenere TRUE. Come posso ottenere f(-5) per restituire FALSE anche se l'utente ha un definito altrove nel loro script al di fuori della funzione f?

Mi aspetto che questo abbia qualcosa a che fare con il parametro where di exists() ma non riesco a capire quale sia l'ambiente corretto per chiamare questo parametro. Non ho ancora avvolto la mia testa completamente intorno agli ambienti in R ...

Grazie!

risposta

10

Basta usare il parametro inherits= di esistente. Vedere la pagina di assistenza ?exists per ulteriori informazioni

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 vince di nuovo! :-) –

Problemi correlati