在r中的ifelse函数中分配变量

时间:2015-03-31 19:33:58

标签: r loops if-statement

我是r新手,我正试图通过解决其中一本关于r的书中的问题来更好地掌握这种语言(我不确定我是否可以将标题放在这里不做广告)。其中一个问题是要求根据某些标准对变量进行条件赋值。更确切地说,我随机选择一个2到12之间的数字(投掷2个骰子)并且依赖于我得到的值,我必须为变量statuspoints分配值,如下所示: / p>

  1. 如果得分为2,3或12,则为status <- FALSEpoints <- NA
  2. 如果得分为7或11,则为status <- TRUEpoints <- NA
  3. 如果分数是4-6,8-10,那么status <- NApoints <- score
  4. 这是一个非常简单的问题,我知道以下代码有效:

    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功能完成?我试图弄清楚是否有一种方法可以解决这个简单的问题,以便我知道如何处理更复杂的问题。

    谢谢!

1 个答案:

答案 0 :(得分: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)

如您所见,我使用ifelsepoints创建逻辑语句,第一个参数是逻辑测试,第二个参数替换得分的值,如果为true,则最后一个替换值如果不对。