美文网首页
R | if 判断语句

R | if 判断语句

作者: 尘世中一个迷途小书僮 | 来源:发表于2019-05-24 11:54 被阅读0次

    在众多编程语言中,大家都会接触到判断语句,各种条件的判断有助于我们根据不同的情况作出不同的选择,那么R又是如何在条件的十字路口作出判断呢?下面将以《R语言入门与实践》中的一个例子展开。

    一般的逻辑判断都是按照如图方式进行的

    在R中,if语句的写法如下:

    if(condition){}
    else if(condition){}
    else {}
    

    在if语句中,()内的是需要进行判断的情况, {}内的是需要执行的代码。要注意的是由于else的情况无需再进行判断,所以其后也无括号。

    • 本次作为展示的例子是一个关于老虎机的函数。通过该函数的编程,我们可以清晰地认识到R中的条件判断是如何进行的。

    抽奖

    我们知道老虎机是根据摇出的图案组合来判断玩家是否中奖的。因此,需要先写出一个可以随机生成不同图案的函数,而且要注意各种图案出现的概率是不一样的。

    get_symbols <- function(){
      wheel <- c("DD", "7", "BBB", "BB", "B", "C", "0")
      sample(wheel, size = 3, replace = T,
             prob = c(0.03, 0.03, 0.06, 0.1, 0.25, 0.01, 0.52))
    }
    
    
    > sym <- get_symbols()
    > sym
    [1] "B"  "BB" "BB"
    

    中奖

    接着,就是根据图案的组合来判断中奖的金额了。需要写出一个score函数可以识别不同的情况以判定中奖的金额。中奖的情况有以下三种:

    1. 三个图案完全相同。
    2. 任意三个带有“B”的图案(BBB, BB, B)。
    3. 一个或多个“C”。
    4. 如果组合中带有“DD”,奖金倍增“DD”的数量。
    中奖组合

    score函数的逻辑结构画出的话将是以下这样的:

    score函数是如下的样子:

    score <- function(sym){
      #三个图案一样的情况
      if(length(unique(sym))==1){
        if(sym[1]=="DD"){
          prize <- 100
        }
        else if(sym[1]=="7"){
          prize <- 80
        }
        else if(sym[1]=="BBB"){
          prize <- 40
        }
        else if(sym[1]=="BB"){
          prize <- 25
        }
        else if(sym[1]=="B"){
          prize <- 10
        }
        else {
          prize <- 10
        }
      }
      
      #三个都是有B的情况
      else if(sum(sym %in% c("BBB", "BB", "B"))==3){
        prize <- 5
      }
      
      #计算C的数量以及中奖金额
      else {
        if(sum(sym=="C")==2){
          prize <- 5
        }
        else if(sum(sym=="C")==1){
          prize <- 2
        }
        else {
          prize <- 0
        }
      }
      
      #根据DD数量调整奖金
      if("DD" %in% sym){
        prize <- prize*2^sum(sym=="DD")
      }
      prize
    }
    

    其中,对于三个图案是否一样我们采用了unique函数进行判断,该函数会返回输入变量中的非重复值,所以当变量中所有元素一样时,unique函数只会返回一个值。理所当然,该值的长度正是1.

    当然,也可以通过sym[1] == sym[2] & sym[2] == sym[3]来判断,看起来会比较直观,但是当需要判断的条件比较多的时候就会很麻烦。

    最后,将两个函数整合在一起就可以愉快地玩耍了!

    play <- function(){
      sym <- get_symbols()
      print(sym)
      prize <- score(sym)
      print(paste("Your prize is", prize))
    }
    
    
    > play()
    [1] "0" "0" "7"
    [1] "Your prize is 0"
    > play()
    [1] "B" "B" "B"
    [1] "Your prize is 10"
    

    完。

    相关文章

      网友评论

          本文标题:R | if 判断语句

          本文链接:https://www.haomeiwen.com/subject/knawzqtx.html