《R语言入门与实践》学习笔记五

第五天任务:

完成项目模拟老虎机,并通过编程学会一下技能:

    1)运用实用策略设计程序。

    2)使用if和else语句告诉R在什么时候做什么事。

3)通过创建查找表的方法找到特定的数值。

4)使用for,while和repeat循环语句使重复性操作自动完成。

…………………………………………………………………………………………

通过设计一个R函数play()搭建一个真正可以运行的老虎机,play()函数需要完成两个任务。首先,它需要随机产生三个符号。其次,它需要根据产生的符号组合计算相应的中奖金额。

第一步模拟动作容易实现,可以用sample函数随机生成三个符号,老虎机中的符号包括:钻石(DD),七(7),三条杠(BBB),两条杠(BB),一条杠(B),樱桃(C)和零(0),符号的选择完全是随机的,但是每个符号出现的概率不同:

get_symbols<-function(){

  wheel<-c(“DD”,”7”,”BBB”,”BB”,”B”,”C”,”0”)

 sample(wheel,size=3,replace=TRUE,

prob=c(0.03,0.03,0.06,0.1,0.25,0.01,0.52))}

第二步将为随机生成的结果赋值,而老虎机有着非常复杂的返还机制,大体概括为:

(1)三个符号完全相同(但不能是符号0)。

(2)三个带杠的符号(任意组合)。

(3)一个或多个樱桃。


钻石相当于百搭牌,可以被钻换为不同的牌,但是百搭牌有一个例外,除非组合中有一个樱桃,否则不能把百搭牌当作樱桃使用。所以,根据已知信息写出计算函数score()。

计算老虎机中奖金额非常复杂,但是可以将一个函数通过三个简单的策略简化这个任务。

(1)将复杂的任务分解为一些简单的子任务。

(2)使用实例。

(3)用通俗的语言描述解决方案,然后将其转化为R代码。

R中可以使用if/else语句在特定条件下执行特定的任务,类似于C/C++中的if使用方法。

if(this){that}else{}

其中this应该为某个逻辑测试或者返回TRUE或者FALSE的R表达式。它只能返回单个TRUE或者FALSE,如果其返回结果是一串向量式的TRUE和FALSE,那么if语句只会使用逻辑向量的第一个元素并且输出一个警告信息,可以使用运算符any或者all将逻辑向量压缩。

trunc()函数接受一个数值作为它的输入,并返回该数值的整数部分,也就是取整函数,而a-trunc(a)就是取小数部分。

使用if/else语句可以将程序分解为8个子任务。

1.测试老虎机产生的符号是否为三个相同的符号。

2.查找三个相同的符号相应的中奖金额。

3.测试符号组合是否全是杠。

4.分配5美元奖金。

5.计算出现的樱桃个数。

6.根据出现的樱桃个数计算中奖金额。

7.计算出现的钻石个数。

8.根据出现的钻石个数调整中奖金额。


score<-function(symbols){

 same<-symbols[1]==symbols[2]&&symbols[2]==symbols[3]

  bars<-symbols %in% c(“B”,”BB”,”BBB”)#识别情形

  if(same){ #计算中奖金额

    payouts<-c(“DD”=100,”7”=80,#引号代表其名称属性

”BBB”=40,”BB”=25,”B”=10,”C”=10,”0”=0)

prize<-unname(payouts[symbols[1]])

}else if(all(bars)){

  prize<-5

}else {

 cherries<-sum(symbols==”C”)

 prize<-c(0,2,5)[cherries+1]

}

diamonds<-sum(symbols==”DD”)#根据钻石个数调整中奖金额

prize*2^diamonds

}

unname函数返回一个对象的副本,但是会将其名称属性移除。

当score函数定义好之后,play函数的编写就可以成功了。

play<-function(){

  symbols<-get_symbols()

  print(symbols)

  score(symbols)

}

play()函数在RStudio中运行结果:


-----------------------------注-------------------------------

1.本学习记录来自Garrett Grolemund先生所著《Hands-On Programming with R》(中文名R语言入门与实践)一书。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值