2015-03-31 58 views
0

我對r很新,我試圖通過解決有關r的書籍中的問題來更好地理解這種語言(我不確定是否可以放置標題這裏不做廣告)。其中一個問題是要求根據特定標準爲變量分配有條件的值。爲了更精確,我隨機選擇2至12之間的數(投擲2個骰子)和依賴性上我得到的值,我要值分配給變量statuspoints如下:在r中的ifelse函數中分配變量

  1. 如果得分是2,3,或12然後status <- FALSEpoints <- NA
  2. 如果得分爲7或11,然後status <- TRUEpoints <- NA
  3. 如果得分是4-6,8-10然後status <- NApoints <- 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 2015-03-31 19:41:35

+0

'ifelse'應該被分配成類似於'example <-ifelse(...)'的形式,所以你不能在其中賦值。 – Soheil 2015-03-31 19:54:00

+0

這個問題需要重寫。 'ifelse'與'if-else'以及賦值與變量值。 'loop'標籤也需要刪除。 – 2015-03-31 20:13:35

回答

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一個邏輯語句第一個參數是邏輯測試,第二個參數取代score的值,如果爲true,最後一個參數取代值如果爲false。