2012-05-19 9 views
24

Stellen wir uns vor, Sie möchten einen einfachen Test basierend auf der Bedingung setdiff(input, 1:9) konstruieren.Wie getestet wird, wenn die Bedingung numerisch (0) zurückgibt in R

Wie kann ich eine

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

Aussage, die Ausführung stoppt konstruieren, wenn der Eingang c(3, 12) ist aber weiterhin, wenn der Eingang c(2,5,7) sagen wird? Vielen Dank, Bertie

+1

Überprüfen, ob "Eingabe" ist numerisch wäre auch hier nett. +1 an @TylerRinker für den Umgang damit :) – daroczig

Antwort

31

Sie ?length verwenden:

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

input <- c(3, 12); 

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

Danke, ich brauchte das für den letzten Schliff meines Lotteriegenerators;) Bertie. – Bertie

11

Hier ist eine andere Option identical(x, numeric(0)). Hier ist ein Beispiel (nahm im Grunde alles von sgibb und ersetzt den Schlüssel Linie, wie ich faul bin):

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

input <- c(3, 12) 

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

Dies schließt nicht die Frage in der Betreffzeile beantworten, aber ich denke, es ist ein Ansatz ist besser für das, was Sie versuchen zu erreichen:

if(!all(input %in% 1:9)) stop("not valid") 
Verwandte Themen