2
この疑問はRで見つかりました。チェックとしてサンプルを再作成しようとしていて、sample
関数の動作が異なる場合があることが判明しました。この例を参照してください:Rサンプル関数が1000万を超える値を返しました
# 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
私はこの千万しきい値に多くの値をテストし、(私は10以上の出力行をテストしていないために認めるが)の値が一致することがわかりました。
誰でもここで何が起こっているのか分かりますか?この1000万の数字について何か重要なことはありますか?
ありがとう@Gregor。ドキュメンテーションの詳細を掘り下げてください。コードを調べた後、 'useHash = TRUE'のときに' sample'ではなく 'sample2'を呼び出します。私はまだ実際に何が起こっているのか理解しようとしています。 – alwaysnew
'sample'は常に' sample.int'を呼び出します。 'sample.int'、*は' .Internal() '*を使って、' useHash'に依存してCで書かれた二つの 'sample'実装の一つを呼び出します。 '.Primitive'または' .Internal'を見ると、それはRを呼び出すRです。 'sample2'はハッシュテーブルを使ったメモリ効率のよい実装で、' sample'は小さなデータにとってより柔軟なデフォルトです。ドミニクの答えで 'pryr'を使ってそのコードを表示する方法を含む[詳細はこの質問を参照](https://stackoverflow.com/q/14035506/903061)。あなたが理解したいと思っていることがどれくらいあるのかわかりません... – Gregor