ratio[i]
[1] 0.9
length(sample(c(1,2,3,4,5,6,7,8,9),2000*ratio[i],replace=T))
[1] 1800
length(sample(c(1,2,3,4,5,6,7,8,9),2000*(1-ratio[i]),replace=T))
[1] 199
看起来R正在进行错误的计算。我尝试了几个数字,有时它是正确的,但有时它不是。所以我做了以下几点。
space<-matrix(nrow=10000,ncol=2)
for (i in 1:10000){
#expected
space[i,1]<-20000*(1-i/10000)
#actual
space[i,2]<-length(sample(1,20000*(1-i/10000),replace=T))
}
plot(space[,1]-space[,2])
看来这个问题不仅限于几个数字。
答案 0 :(得分:1)
这是因为浮点运算不精确。如果您执行此操作,2000*(1-ratio[i])
并未提供完全 200
options(digits=22)
2000*(1-ratio[i])
[1] 199.9999999999999431566
如果你2000 * (1 - 0.9)
,你会得到相同的结果。
sample
使用size
参数的底限和底面199.9999 ... 566是199.您可以将其包裹在round()
中以确保获得您期望的样本大小
答案 1 :(得分:0)
似乎&#39;样本&#39;是地板&#39;地板&#39;论证&#39; size&#39;当双人通过时。
请确保您在参数&#39; size&#39;中传递一个整数。
length(sample(1:9,size=2000*(1-0.9),replace=TRUE)) # length is 199
但
length(sample(1:9,size=round(2000*(1-0.9)),replace=TRUE)) # length is 200