40 votes

Comment vérifier l'existence d'un argument d'entrée pour les fonctions R

J'ai une fonction définie comme

myFun <- function(x, y, ...) {
  # using exists
  if (exists("z")) { print("exists z!") }
  # using missing
  try(if (!missing("z")) { print("z is not missing!") }, silent = TRUE)
  # using get
  try(if (get("z")) { print("get z!") }, silent = TRUE)

  # anotherFun(...)
}

Dans cette fonction, je veux vérifier si l'utilisateur entre "z" dans la liste des arguments. Comment je peux faire ça ? J'ai essayé exists("z"), missing("z"), et get("z") et aucun d'entre eux ne fonctionne.

31voto

Tommy Points 16323

@Sacha Epskamp a une assez bonne solution, mais elle ne fonctionne pas toujours. Le cas où il échoue est si l'argument "z" est passé à NULL...

# Sacha's solution
myFun <- function(x, y, ...) { 
  args <- list(...)
  exist <- !is.null(args[['z']])
  return(exist)
}

myFun(x=3, z=NULL) # FALSE, but should be TRUE!


# My variant
myFun2 <- function(x, y, ...) {
  args <- list(...)
  exist <- "z" %in% names(args)
  exist
}

myFun2(x=3, z=NULL) # TRUE

4voto

Sacha Epskamp Points 14956

Voici une façon dont je le fais souvent. Convertir d'abord ... en liste, puis vérifier si les éléments ne sont pas NULL :

myFun <- function(x, y, ...) { 
args <- list(...)
exist <- !is.null(args[['z']])
return(exist)
}

Quelques résultats :

> myFun()
[1] FALSE
> myFun(z=1)
[1] TRUE

Prograide.com

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.

Powered by:

X