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

alw*_*new 2 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
Run Code Online (Sandbox Code Playgroud)

我测试了很多这个1000万阈值的值,发现值匹配(虽然我承认没有测试超过10个输出行).

谁知道这里发生了什么?这个1000万的数字有什么重要意义吗?

Gre*_*gor 5

是的,有一些特别的东西1e7.如果你查看sample代码,它最终会调用sample.int.正如你可以看到在?sample,默认值的useHash说法sample.int

useHash = (!replace && is.null(prob) && size <= n/2 && n > 1e7)
Run Code Online (Sandbox Code Playgroud)

&& n > 1e7意味着当您达到上述时1e7,默认首选项将切换为useHash = TRUE.如果需要一致性,请sample.int直接调用并指定useHash值.(TRUE对于内存效率是一个很好的选择,?sample有关详细信息,请参阅参数说明.)