【发布时间】:2012-05-08 10:29:40
【问题描述】:
在 R 中,我有以下示例模块,它重复了一个 for 循环 n 次:
function(n){
#inputs - n - number of results required
#reserve n spaces for results
r_num_successes <- 1:n
#start looping n times
for(i in 1:n){
#set first uniform "random" deviate equal to 0.05 and number of successes to 0
current_unif <- 0.05
num_successes <- 0
#start while loop that updates current_unif - it runs as long as
#current_unif is less than 0.95, increments num_successes each loop
while(current_unif < 0.95){
#set current_unif to a uniform random deviate between the
#existing current_unif and 1
current_unif <- runif(1,current_unif)
num_successes <- num_successes + 1
}
#set the i-th element of the results vector to that final num_successes
#generated by the while loop
r_num_successes[i] <- num_successes
}
#output the mean of all the successes
return(mean(r_num_successes))
}
当n 变大时,它开始变得非常缓慢。有什么好的优化方法吗?
【问题讨论】:
-
请用文字描述这个函数应该做什么。看起来您只是在以 5% 的成功率从统一样本中抽取
n。 -
@Andrie 显然他正在尝试提出一种测量
runif分布的方法,值得提交给 thedailywtf :-) -
@CarlWitthoft Ahah。我就在那里,认为这是最模糊的随机采样器竞赛的新条目......
-
@dplanet 我看到您已将 cmets 添加到您的代码中。这只是将 cmets 添加到非常无意义的代码中。请用文字描述你想要做什么。
-
@CarlWitthoft - 我懒洋洋地+1。然而,这只是我正在制作的函数的一个更简单的例子,它有更多的行,因此需要优化。我已经评论了脚本 - 我觉得很难解释,因为它除了证明我的观点之外没有任何用处。
标签: r