R样本函数发布超过1000万个值

时间:2017-11-20 17:54:54

标签: r sample

我在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万的数字有什么重大意义吗?

1 个答案:

答案 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处的参数说明。)