2015-03-31 3 views
0

Я довольно новичок в r, и я пытаюсь лучше понять этот язык, решая проблемы из одной из книг о r (я не уверен, могу ли я поместить заголовок здесь, чтобы не рекламировать его). Одной из проблем является требование условного присвоения значений переменным, основанным на определенных критериях. Чтобы быть более точным, я случайно выбрать число в диапазоне от 2 до 12 лет (метание 2 кости) и в зависимости от значения я получаю, я должен присваивать значения переменным status и points следующим образом:Назначение переменных внутри функции ifelse в r

  1. если оценка является 2,3, или 12, то status <- FALSE и points <- NA
  2. , если оценка 7 или 11, то status <- TRUE и points <- NA
  3. , если оценка является 4-6,8-10 затем status <- NA и points <- score

Это довольно простая задача, и я знаю, что следующий код работает:

score <- sample(2:12,1) 
    if(score %in% c(2,3,12)){ 
     status <- FALSE 
     points <- NA 
    } else if(score %in% c(7,11)){ 
     status <- TRUE 
     points <- NA 
    } else { 
     status <- NA 
     points <- score 
    } 

Я также пытался решить эту проблему с помощью функции ifelse, но я получаю сообщение об ошибке при попытке присвоить переменные. Вот что я сделал (я знаю, что то, что я получаю сейчас, является символьным вектором, но это был единственный способ заставить его работать).

ifelse(any(score == c(2,3,12)), "game_status = FALSE, point = NA", 
     ifelse(any(score == c(7,11)), "game_status = TRUE, point = NA", 
     paste("game_status = NA, point = ", score))) 

Есть ли способ присвоить значения в функции ifelse? Кроме того, это можно сделать с помощью функции switch? Я пытаюсь выяснить, есть ли только один способ решить эту простую проблему, чтобы я знал, как действовать с более сложными.

Спасибо!

+0

'ifelse' - это функция. 'if' и' else' являются управляющими операторами. 'ifelse' означает иметь одно (возможно, векторное) возвращаемое значение. Он не предназначен для того, чтобы делать то, что вы пытаетесь сделать. – Thomas

+0

'ifelse' должно быть присвоено что-то вроде:' example <-ifelse (...) ', поэтому вы не можете назначать значения внутри него. – Soheil

+0

Этот вопрос нужно переписать. 'ifelse' vs' if-else' и присваивание vs значениям переменных. Также необходимо удалить тег loops. –

ответ

0

Это может быть не самый элегантный ответ, но вы могли бы сделать это, которое демонстрирует использование ifelse, а также условные операторы:

status=NULL 
status[score %in% c(2,3,12)]<-FALSE 
status[score %in% c(7,11)]<-TRUE 
status[score %in% c(4:6,8:10)]<-NA 

points=ifelse(score %in% c(4:6,8:10),score,NA) 

Как вы можете видеть, я использовал ifelse создать логическое утверждение для points первым аргументом является логический тест, второй аргумент заменяет значение оценки, если true, а последнее заменяет значение, если false.