用甲板洗牌模拟在R中进行功能性思考

用甲板洗牌模拟在R中进行功能性思考,r,functional-programming,R,Functional Programming,我正在看(复制到下面),并希望在功能上(特别是在R中)模拟它方面得到一些帮助 在下雪的下午,你喜欢玩一个标准的、随机洗牌的52张牌的纸牌“游戏”。你开始正面朝上,一次一张,把牌堆成一堆。当你发每张牌时,你也要大声说话,按顺序,13张牌面对一副标准牌组:a、2、3等(当你到国王牌时,你从a开始)。你一直这样做,直到你发的牌的等级与你大声说话的等级相匹配,在这种情况下你输了。如果你在没有任何比赛的情况下到达牌组的末端,你就赢了 你获胜的可能性有多大 通过for循环执行此操作似乎很简单-在每个循环中,

我正在看(复制到下面),并希望在功能上(特别是在R中)模拟它方面得到一些帮助

在下雪的下午,你喜欢玩一个标准的、随机洗牌的52张牌的纸牌“游戏”。你开始正面朝上,一次一张,把牌堆成一堆。当你发每张牌时,你也要大声说话,按顺序,13张牌面对一副标准牌组:a、2、3等(当你到国王牌时,你从a开始)。你一直这样做,直到你发的牌的等级与你大声说话的等级相匹配,在这种情况下你输了。如果你在没有任何比赛的情况下到达牌组的末端,你就赢了

你获胜的可能性有多大

通过for循环执行此操作似乎很简单-在每个循环中,通过
rep(seq(13),4)
构建数据组,对其进行置换,然后检查置换数据组和未置换数据组之间的任何条目是否相等。我特别感兴趣的是功能性方法。为此,我认为构建
x惯用的R代码是功能性的,因为它涉及到无副作用的函数(通常是匿名的)、矢量化的代码,以及大量使用
apply
家族中的函数(这是
map
的R版本,函数编程中的统一主题之一)。您可以这样做模拟:

x = rep(1:13,4)
deranged <- function(x,y){all(x!=y)}
samples <- replicate(10000,sample(x,52))
wins <- apply(samples,2,function(y){deranged(x,y)})
p <- sum(wins)/10000
x=rep(1:13,4)
精神错乱