2012-05-19 5 views
24

Представим себе, что вы хотели бы построить простой тест, основанный на условии setdiff(input, 1:9).Как проверить, когда условие возвращает числовое значение (0) в R

Как я могу построить

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

заявление, которое останавливает выполнение при входе c(3, 12), но продолжается, когда вход c(2,5,7) сказать? Большое спасибо, Берти

+1

Проверка того, что 'input' является числовым, было бы неплохо и здесь. +1 к @TylerRinker для обработки этого тоже :) – daroczig

ответ

31

Вы могли бы использовать ?length:

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

input <- c(3, 12); 

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

Спасибо, мне это нужно для последних штрихов моего генератора лотереи;) Берти. – Bertie

11

Вот еще один вариант identical(x, numeric(0)). Вот пример (в основном взял все от sgibb и заменить ключевую строку, как я ленивый):

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

input <- c(3, 12) 

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

Это не отвечает на вопрос в вашей теме, но я думаю, что это лучший подход для чего вам пытаются достичь:

if(!all(input %in% 1:9)) stop("not valid") 
Смежные вопросы