《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)一个或多个樱桃。

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

钻石相当于百搭牌,可以被钻换为不同的牌,但是百搭牌有一个例外,除非组合中有一个樱桃,否则不能把百搭牌当作樱桃使用。所以,根据已知信息写出计算函数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.根据出现的钻石个数调整中奖金额。

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

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中运行结果:

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

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

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