美文网首页
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