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