在众多编程语言中,大家都会接触到判断语句,各种条件的判断有助于我们根据不同的情况作出不同的选择,那么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
函数可以识别不同的情况以判定中奖的金额。中奖的情况有以下三种:
- 三个图案完全相同。
- 任意三个带有“B”的图案(BBB, BB, B)。
- 一个或多个“C”。
- 如果组合中带有“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"
完。
网友评论