Comment tester quand la condition retourne numérique (0) dans R

imaginons que vous souhaitiez construire un test simple basé sur la condition setdiff(input, 1:9).

Comment puis-je construire un

if isnotempty(setdiff(input, 1:9)) stop ("not valid") 

déclaration qui arrête l'exécution lorsque l'entrée est c(3, 12) mais continue quand l'entrée est c(2,5,7) dire? Merci beaucoup, Bertie

25
r
demandé sur sgibb 2012-05-19 15:10:59

4 réponses

Vous pouvez utiliser ?length:

isEmpty <- function(x) {
    return(length(x)==0)
}

input <- c(3, 12);

if (!isEmpty(setdiff(input, 1:9))) {
    stop ("not valid")
}
36
répondu sgibb 2012-05-19 11:41:03

Voici une autre option identical(x, numeric(0)). Voici un exemple (en gros tout pris de sgibb et remplacé la ligne de clé que je suis paresseux):

isEmpty <- function(x) {
    return(identical(x, numeric(0)))
}

input <- c(3, 12)

if (!isEmpty(setdiff(input, 1:9))) {
    stop ("not valid")
}
11
répondu Tyler Rinker 2012-05-19 13:01:10

ceci ne répond pas à la question dans votre ligne d'objet, mais je pense que c'est une meilleure approche pour ce que vous essayez d'atteindre:

 if(!all(input %in% 1:9)) stop("not valid")
0
répondu flodel 2012-05-19 18:20:29

j'ai aimé la fonction isEmpty. Je propose ce qui suit, juste au cas où vous parsez un vecteur, ou une liste:

isEmpty <- function(x) {
s<-sapply(x, function(y) length(y)==0, simplify = T)
return(s)
}
0
répondu i love mistaking 2018-06-13 11:38:55