2012-05-19 5 views
24

Imaginemos que desea construir una prueba simple basada en la condición setdiff(input, 1:9).Cómo probar cuando la condición devuelve un valor numérico (0) en R

¿Cómo puedo construir un comunicado

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

que se detiene la ejecución cuando la entrada es c(3, 12) pero continúa cuando la entrada es decir c(2,5,7)? Muchas gracias, Bertie

+1

Comprobando si 'input' es numérico sería bueno aquí también. +1 a @TylerRinker por manejar eso también :) – daroczig

Respuesta

31

usted podría utilizar ?length:

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

input <- c(3, 12); 

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

Gracias, necesitaba esto para los toques finales de mi generador de Lotería;) Bertie. – Bertie

11

Aquí hay otra opción identical(x, numeric(0)). He aquí un ejemplo (básicamente tomó todo, desde sgibb y se sustituye la línea de tecla que soy perezoso):

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

input <- c(3, 12) 

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

esto no responde a la pregunta en su línea de asunto, pero creo que es una mejor aproximación de lo que están tratando de lograr:

if(!all(input %in% 1:9)) stop("not valid") 
Cuestiones relacionadas