R中样本函数中的多个变量

问题描述 投票:1回答:2

我试图使用样本函数来产生数字“ 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 
r sampling dice
2个回答
1
投票

这里是一个涵盖两个选项的解决方案。为您最初发布的单一样本方法设置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)})

1
投票

您可以使用sapplyseq来运行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
© www.soinside.com 2019 - 2024. All rights reserved.