Подтвердить что ты не робот

Как проверить, когда условие возвращает числовое значение (0) в R

Предположим, вы хотели бы построить простой тест, основанный на условии setdiff(input, 1:9).

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

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

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

4b9b3361

Ответ 1

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

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

input <- c(3, 12);

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

Ответ 2

Вот еще один вариант 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")
}

Ответ 3

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

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

Ответ 4

Мне понравилась функция isEmpty. Я предлагаю следующее, на случай, если вы проанализируете вектор или список:

isEmpty <- function(x) {
s<-sapply(x, function(y) length(y)==0, simplify = T)
return(s)
}

Ответ 5

Я использовал следующие функции:

# 1. Check if 'integer(0)'
is.integer0 <- function(x) {
  is.integer(x) && length(x) == 0L
}

# 2. Check if 'numeric(0)'
is.numeric0 <- function(x) {
  identical(x, numeric(0))
}

# 3. Check is 'integer0' or 'numeric0'
is.int_num_0 <- function(x) {
  is.integer0(x) || is.numeric0(x)
}

Надеюсь, это будет полезно.