我在R中发现了这个怪癖,并且无法找到它出现的原因。我试图重新创建一个样本作为检查,并发现sample
函数在某些情况下表现不同。见这个例子:
# Look at the first ten rows of a randomly ordered vector of the first 10 million integers
set.seed(4)
head(sample(1:10000000), 10)
[1] 5858004 89458 2937396 2773749 8135739 2604277 7244055 9060916 9490395 731445
# Select a specified sample of size 10 from this same list
set.seed(4)
sample(1:10000000), size = 10)
[1] 5858004 89458 2937396 2773749 8135739 2604277 7244055 9060916 9490395 731445
# Try the same for sample size 10,000,001
set.seed(4)
head(sample(1:10000001), 10)
[1] 5858004 89458 2937396 2773750 8135740 2604277 7244056 9060917 9490396 731445
set.seed(4)
sample(1:10000001), size = 10)
[1] 5858004 89458 2937397 2773750 8135743 2604278 7244060 9060923 9490404 731445
我测试了很多这个1000万阈值的值,发现这些值匹配(虽然我承认没有测试超过10个输出行)。
任何人都知道这里发生了什么?这个1000万的数字有什么重大意义吗?
答案 0 :(得分:5)
是的,1e7
有一些特别之处。如果您查看sample
代码,则最终会调用sample.int
。正如您在?sample
看到的那样,useHash
的{{1}}参数的默认值为
sample.int
useHash = (!replace && is.null(prob) && size <= n/2 && n > 1e7)
表示当您超过&& n > 1e7
时,默认首选项会切换为1e7
。如果您想要一致性,请直接致电useHash = TRUE
并指定sample.int
值。 (useHash
是内存效率的不错选择,有关详细信息,请参阅TRUE
处的参数说明。)