我具有以下功能:
samp315<-function(n=30, desmean=86, distance=3.4995) {
x = seq(from = 0, to = 100, by = 0.1)
samp<-0
while (!between(mean(samp),desmean-distance,desmean+distance)) samp<-sample(x,n,replace=TRUE)
samp
}
percent <- samp315()
我几乎想在0-100范围内生成30个数字,平均值为86 +/- 3.4995,但是,每当我运行最后一行时,它将永久加载,或者当我幸运时,它将生成所需的列表结果。关于如何更改功能以改善其功能的任何想法?
答案 0 :(得分:0)
正如Parfait在评论中所建议的那样,您正在使用一种随机化策略来提供您感兴趣的条件的可能性很小。对this question的其他回答没有帮助您吗?
您可以尝试其他一些可能的策略。
n = 30
# Using truncated normal
library(truncnorm)
x = round(rtruncnorm(n, a = -0.0495, b = 100.0495, mean = 85, sd = 3.5*2), 1)
# Using beta
sig = 3
x = round(100*rbeta(n, (0.85)*sig, (1-0.85)*sig), 1)
round(..., 1)
旨在与向量x
对齐。这些方法的值都只有85,几乎没有。这是您必须考虑的折衷方案。例如,如果要取平均值为85 +/- 3.5,则不能有太多低于10的值。因此,您必须降低选择此类值的可能性。使用该函数,当它完成时,您可能会发现更接近85的值表示出来。