R 变量和阈值之间差的期望值

R 变量和阈值之间差的期望值,r,sum,subset,mean,R,Sum,Subset,Mean,我有一个定制的牌组,由8张顺序为2^n,n=0,…,6的牌组成。我抽牌(不换牌),直到总数等于或大于阈值。如何在R中实现一个计算总和和阈值之间差值平均值的函数 我试着用这个 但这需要很长时间。。。我认为有一种方法可以通过概率/模拟来实现,但我可以找到 阈值可以大于一张卡的值,即阈值=500,也可以小于一张卡的值,即阈值=50 到目前为止,我所做的是找到满足和大于或等于阈值条件的所有子集。然后我将只减去阈值并计算平均值 我在R中使用了以下代码。对于一个小集合,我很快得到了答案。然而,我已经使用包含

我有一个定制的牌组,由8张顺序为2^n,n=0,…,6的牌组成。我抽牌(不换牌),直到总数等于或大于阈值。如何在R中实现一个计算总和和阈值之间差值平均值的函数

我试着用这个 但这需要很长时间。。。我认为有一种方法可以通过概率/模拟来实现,但我可以找到

阈值可以大于一张卡的值,即阈值=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)

set我不知道是否有可能得到一个精确的解,因为有太多可能的组合。进行模拟可能更好,即编写一个用于1次完全绘制的脚本,然后多次重新运行该脚本。由于解决方案非常相似,因此模拟应给出相当好的近似值

好的,下面是:

set <- rep(2^(0:6), each = 8)
thr <- 500

fun <- function(set,thr){
    x <- cumsum(sample(set))
    value <- x[min(which(x >= thr))]
    value
}

system.time(a <- replicate(100000, fun(set,thr)))
# user  system elapsed 
# 1.10    0.00    1.09

mean(a - thr)
# [1] 21.22992

设置为Hi。欢迎来到堆栈溢出。在发布[r]问题时,提供答案通常很有用。当问这样的问题时,分享你的尝试,即使它不起作用,这样我们就可以开始了。嗨,对不起,我是stackoverflow的新手。我编辑了这个问题以显示我到目前为止所做的工作。也许我的方法是“暴力”,但我不知道如何改进它。你解决的问题与我的问题相同吗?是的,这是我在这里指出的问题中发布的链接我在这里发布的代码是你向Pierre指出的代码,经过一些修改,但是,对于一个大集合(在我的例子中是56),它已经运行了几个小时。对于一个小集合,代码工作得很完美,但对于一个大集合,代码工作得并不完美。我想是因为排列在56左右!/23!@比如说,100万次随机抽签就足够了,还是必须是所有可能的组合?因为我写了一个每秒可以画100k的脚本,但我不能完全确定这是否是你想要的。它确实允许您估计平均差异。