¿Cómo verificar si el objeto (variable) se define en R?

Me gustaría comprobar si alguna variable está definida en R – sin obtener un error. ¿Cómo puedo hacer esto?

Mis bashs (no exitoso):

> is.na(ooxx) Error: object 'ooxx' not found > is.finite(ooxx) Error: object 'ooxx' not found 

¡Gracias!

Quieres que exists() :

 R> exists("somethingUnknown") [1] FALSE R> somethingUnknown < - 42 R> exists("somethingUnknown") [1] TRUE R> 

See ?exists , para alguna definición de “… se define”. P.ej

 > exists("foo") [1] FALSE > foo < - 1:10 > exists("foo") [1] TRUE 

si estás dentro de una función, falta () es lo que quieres.

 exchequer = function(x) { if(missing(x)){ message("x is missing… :-(") } } exchequer() x is missing… :-( 

Como otros han señalado, lo que estás buscando exists . Tenga en cuenta que el uso de los nombres con los nombres utilizados por los paquetes base de R devolvería verdadero independientemente de si definió la variable:

 > exists("data") [1] TRUE 

Para evitar esto (como lo señala Bazz, vea ?exists ), use el argumento inherits :

 > exists("data", inherits = FALSE) [1] FALSE foo < - TRUE > exists("foo", inherits = FALSE) [1] TRUE 

Por supuesto, si desea buscar los espacios de nombre de los paquetes adjuntos, esto también sería insuficiente:

 > exists("data.table") [1] FALSE require(data.table) > exists("data.table", inherits = FALSE) [1] FALSE > exists("data.table") [1] TRUE 

Lo único que se me ocurre para evitar esto, buscar en paquetes adjuntos pero no en paquetes base, es el siguiente:

 any(sapply(1:(which(search() == "tools:rstudio") - 1L), function(pp) exists(_object_name_, where = pp, inherits = FALSE))) 

Compare la sustitución de _object_name_ con "data.table" ( TRUE ) vs. "var" ( FALSE )

(por supuesto, si no estás en RStudio, creo que el primer entorno adjunto automáticamente es "package:stats" )

Si no desea utilizar comillas, puede usar el truco deparse (substitute ()) que encontré en la sección de ejemplo de? Substitute:

 is.defined < - function(sym) { sym <- deparse(substitute(sym)) env <- parent.frame() exists(sym, env) } is.defined(a) # FALSE a <- 10 is.defined(a) # TRUE