我试图使用样本函数来产生数字“ 3”的次数,如果我“掷骰子” N次会出现。例如,如果我想要N次后数字3的频率。但是我试图在N次之后执行此操作,即N + 10,N + 20直到N + 200。因此,换句话说,10、20、30、40 ... 210之后数字3的频率滚动。但是,除了每次都复制代码并更改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)})
您可以使用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