2012-05-19 10 views
24

Immaginiamo che ti piacerebbe costruire un semplice test basato sulla condizione setdiff(input, 1:9).Come testare quando la condizione restituisce numerici (0) in R

Come posso costruire una dichiarazione

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

che interrompe l'esecuzione quando l'ingresso è c(3, 12) ma continua quando l'ingresso è c(2,5,7) dire? Molte grazie, Bertie

+1

Controllare se 'input' è numerico sarebbe bello anche qui. +1 a @TylerRinker per aver gestito anche questo :) – daroczig

risposta

31

Si potrebbe usare ?length:

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

input <- c(3, 12); 

if (!isEmpty(setdiff(input, 1:9))) { 
    stop ("not valid") 
} 
+1

Grazie, avevo bisogno di questo per gli ultimi ritocchi del mio generatore della Lotteria;) Bertie. – Bertie

11

Ecco un'altra opzione identical(x, numeric(0)). Ecco un esempio (in pratica ha preso tutto da sgibb e sostituito la linea chiave come io sono pigro):

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

input <- c(3, 12) 

if (!isEmpty(setdiff(input, 1:9))) { 
    stop ("not valid") 
} 
0

questo non risponde alla domanda in oggetto, ma penso che sia un approccio migliore per quello che stanno cercando di ottenere:

if(!all(input %in% 1:9)) stop("not valid") 
Problemi correlati