R中sample函数中的多变量

R中sample函数中的多变量,r,sampling,dice,R,Sampling,Dice,我试图使用sample函数来生成数字“3”的次数,如果我“掷骰子”N次,就会出现数字“3”。 例如,如果我想要N次之后数字3的频率。但是我试着在N次之后,N+10,N+20,直到N+200。 换句话说,数字3在10,20,30,40之后的频率。。。210卷。 但是,不是每次都复制代码并更改N的值,有没有更有效的方法来做到这一点? 这就是代码: N=10 e1= sample(1:6,N,rep=T) e11=(e1==3) sum_e11=sum(e11) relative_freq= sum_

我试图使用sample函数来生成数字“3”的次数,如果我“掷骰子”N次,就会出现数字“3”。 例如,如果我想要N次之后数字3的频率。但是我试着在N次之后,N+10,N+20,直到N+200。 换句话说,数字3在10,20,30,40之后的频率。。。210卷。 但是,不是每次都复制代码并更改N的值,有没有更有效的方法来做到这一点? 这就是代码:

N=10
e1= sample(1:6,N,rep=T)
e11=(e1==3)
sum_e11=sum(e11)
relative_freq= sum_e11/N
relative_freq 

这是一个涵盖这两种选择的解决方案。为您最初发布的单个示例方法设置
iterations=1
。迭代次数越多,频率在数学上越精确。
sapply
函数将以10到200之间的顺序以10的倍数运行函数

relative_freq <- function(target,N,iterations=10000){
  result <- logical(iterations)
  for(i in 1:iterations){
    samp <- sample(1:6,N,replace=TRUE)
    result[i] <- sum(samp==target)
  }
  mean(result)
}

relative_freq(3,10)
relative_freq(3,20,1)

sapply(seq(10,200,by=10),function(n){relative_freq(3,n)})

relative_freq您可以使用
sapply
seq
运行
10,20,30,40。。。210

set.seed(7)
sapply(seq(10,210,10), function(N) sum(sample(1:6, N, replace=TRUE) == 3)/N)
# [1] 0.3000000 0.2500000 0.1000000 0.1250000 0.1400000 0.1666667 0.1714286
# [8] 0.1250000 0.1444444 0.0800000 0.1727273 0.1916667 0.1461538 0.1857143
#[15] 0.1666667 0.1437500 0.1588235 0.1888889 0.1631579 0.1800000 0.2285714

如果您只计划为每个尺寸绘制一个样本
N
,那么结果将不会是准确的相对频率。您需要取相同大小的多个样本的平均值
N
。否则,您当前的方法仅显示可以滚动多少个3。这很好,但是有没有更好的方法来检查所有滚动(N+10等),而不是每次我希望更改N时复制并通过代码?