J'aimerais vérifier si une variable est définie dans R - sans obtenir d'erreur. Comment faire ?
Mes tentatives (infructueuses) :
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Gracias.
J'aimerais vérifier si une variable est définie dans R - sans obtenir d'erreur. Comment faire ?
Mes tentatives (infructueuses) :
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Gracias.
@Gavin & Dirk, vous êtes si gentils l'un envers l'autre :) La seule solution est de tirer à pile ou face (Bernoulli avec p=0.5 :-)) qui obtiendra l'acceptation ! :-)
La vérification des éléments d'une liste peut s'avérer un peu plus délicate : stackoverflow.com/q/7719741
Comme d'autres l'ont souligné, vous recherchez exists
. Gardez à l'esprit que l'utilisation de exists
avec des noms utilisés par les paquets de base de R renverrait un résultat vrai, que vous ayez ou non défini la variable :
> exists("data")
[1] TRUE
Pour contourner ce problème (comme l'a fait remarquer Bazz ; voir ?exists
), utiliser la fonction inherits
argument :
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
Bien entendu, si vous souhaitiez effectuer une recherche dans les espaces de noms des paquets attachés, cette solution ne serait pas non plus satisfaisante :
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
La seule chose à laquelle je peux penser pour contourner ce problème est de rechercher dans les paquets joints mais no dans les paquets de base -- est la suivante :
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
Comparez en remplaçant _object_name_
con "data.table"
( TRUE
) vs. "var"
( FALSE
)
(bien sûr, si vous n'êtes pas sur RStudio, je pense que le premier environnement automatiquement attaché est "package:stats"
)
Si vous ne voulez pas utiliser de guillemets, vous pouvez utiliser deparse(substitute())
que j'ai trouvé dans la section des exemples 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
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.