Если функция ELSE работает в простом случае, но моя расширенная функция не работает - PullRequest
1 голос
/ 06 ноября 2019

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

Я написал «глупую» функцию с большим количеством повторений и строк, которая может решить задачу впростой случай:

# Findgroup (Everything manually typed out)
# Purpose of function:
#If 1 or 2: output A
#If 3 or 4: output B
#If 5 or 6: output random A/B (bonus if this can be balanced equally over the dataset)
# Else output "error"
findGroup <- function(x){ if (x == 1) { 
  "A"
} else if (x == 2) {
  "A"
} else if  (x == 3) {
  "B"
} else if  (x == 4) {
  "B"
}else if  (x == 5) {
  sample(c("sA","sB"),1)
}else if  (x == 6) {
  sample(c("sA","sB"),1)
} else {
  "Error"
}}

# Brief test: All matches expectations
findGroup(1) # Returns A
findGroup(3) # Returns B
findGroup(5) # Samples
findGroup(7) # Returns Error

Это нормально, если бы мне пришлось оценить несколько чисел. Но что мне делать, если список чисел намного сложнее? Я попытался написать функцию, которая решает это в меньшем количестве строк, но результат не работает:

# Findgroup new
# Purpose of function:
#If 2:8: output A
#If 10:16: output B
#If 1,9: output random A/B (bonus if this can be balanced equally)
findGroupNew <- function(x){ if (x == 2|3|4|5|6|7|8) { 
  "A"
} else if (x == 10|11|12|13|14|15|16) {
  "B"
} else if (x == 1||9) {
  sample(c("sA","sB"),1)
} else {
  "Error"
}}

# Brief test: All return A!!!
findGroupNew(1) # Should sample
findGroupNew(3) # Should Return A
findGroupNew(11) # Should Return B
findGroupNew(17) # Should Return Error

Это может быть глупой ошибкой, такой как не использование правильного знака для ИЛИ, но попытка решениятакие как использование ||и & не был успешным.

Я надеюсь, что есть быстрое решение этой проблемы, и будем благодарны за ваш отзыв.

1 Ответ

1 голос
/ 06 ноября 2019

Используйте %in% для проверки нескольких значений.

findGroupNew <- function(x) { 
   if (x %in% 2:6) { 
    return("A")
  } else if (x %in% 10:16) {
    return("B")
  } else if (x %in% c(1, 9)) {
    return(sample(c("sA","sB"),1))
  } else {
    return("Error")
  }
}

findGroupNew(1)
#[1] "sB"
findGroupNew(3)
#[1] "A"
findGroupNew(11)
#[1] "B"
findGroupNew(7)
#[1] "Error"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...