【发布时间】:2016-05-08 22:13:19
【问题描述】:
我有一个自定义套牌,由 2^n、n=0、..、6 序列的八张牌组成。我抽牌(不更换),直到总和等于或大于阈值。如何在 R 中实现一个计算总和与阈值之差平均值的函数?
我尝试使用这个How to store values in a vector with nested functions 但这需要很长时间......我认为有一种方法可以通过概率/模拟来做到这一点,但我可以弄清楚。
阈值可以大于单张卡的值,即阈值=500,也可以小于单卡的值,即阈值=50
到目前为止,我所做的是找到所有满足总和大于或等于阈值条件的子集。然后我只会减去阈值并计算平均值。
我在 R 中使用以下代码。对于一小部分,我很快就能得到答案。但是,我已经使用包含 56 个数字的集合运行了我们的几个函数,并且仍在工作。
set<-c(rep(1,8),rep(2,8), rep(4,8),rep(8,8),rep(16,8),rep(32,8),rep(64,8))
recursive.subset <-function(x, index, current, threshold, result){
for (i in index:length(x)){
if (current + x[i] >= threshold){
store <<- append(store, sum(c(result,x[i])))
} else {
recursive.subset(x, i + 1, current+x[i], threshold, c(result,x[i]))
}
}
}
store <- vector()
inivector <- vector(mode="numeric", length=0) #initializing empty vector
recursive.subset (set, 1, 0, threshold, inivector)
【问题讨论】:
-
嗨。欢迎来到堆栈溢出。在发布 [r] 问题时,提供minimal reproducible example 通常很有用。提出此类问题时,请分享您的尝试,即使它不起作用,这样我们就可以开始。
-
嗨,对不起,我是 stackoverflow 的新手。我编辑了这个问题以显示我到目前为止所做的事情。可能我的方法是“蛮力”,但我不知道如何改进它。
-
你解决的问题和this一样吗?
-
是的,这是我在stackoverflow.com/questions/35107568/… 指向的问题中发布的链接,我在此处发布的代码是您向 Pierre 指出的代码,并进行了一些修改,但是,对于一个大集合(在我的案例 56)它已经运行了几个小时。对于一个小的集合,代码可以完美运行,但不适用于大集合。我认为是因为排列在 56 左右! / 23!
-
@ph33 做 100 万次随机抽奖是否足够,还是必须是所有可能的组合?因为我编写了一个每秒可以进行 100k 次绘制的脚本,但我不完全确定这是否是您正在寻找的。它确实允许您估计平均差。