tipos - tablas en r
¿Cómo verificar si el objeto(variable) está definido en R? (5)
Como otros han señalado, lo que buscas exists
. Tenga en cuenta que el uso de exists
con los nombres utilizados por los paquetes base de R devolverá verdadero independientemente de si definió la variable:
> exists("data")
[1] TRUE
Para solucionar esto (como lo señala Bazz; see ?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 se quedaría corto:
> 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 solucionar esto, para buscar en paquetes adjuntos pero no en paquetes base, es lo 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
) frente a "var"
( FALSE
)
(por supuesto, si no estás en RStudio, creo que el primer entorno adjunto automáticamente es "package:stats"
)
Me gustaría comprobar si alguna variable está definida en R - sin recibir un error. ¿Cómo puedo hacer esto?
Mis intentos (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>
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… :-(
Si no quiere usar comillas, puede usar el truco de deparse (suplente ()) que encontré en la sección de ejemplo de? Sustituto:
is.defined <- function(sym) {
sym <- deparse(substitute(sym))
env <- parent.frame()
exists(sym, env)
}
is.defined(a)
# FALSE
a <- 10
is.defined(a)
# TRUE
Ver ?exists
, para alguna definición de "... está definido". P.ej
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE