【问题标题】:What is the maximum value with set.seed()?set.seed() 的最大值是多少?
【发布时间】:2018-03-27 09:19:19
【问题描述】:

我正在研究中等规模的数据集,比如从一个包含 100,000 个观测值的大型数据集中抽取 9000 个观测值。

我可以使用下面的set.seed() 函数来保证我每次都得到完全相同的子集吗?

set.seed(10000)  

set.seed() 可以使用的最大值是多少?

【问题讨论】:

    标签: r


    【解决方案1】:

    来自?set.seed 文档:

    seed 单个值,解释为整数或 NULL(请参阅 “详细信息”)。

    所以最大值将是允许的最大整数:

    .Machine$integer.max
    [1] 2147483647
    

    一个简单的测试:

    set.seed(2147483647)
    set.seed(2147483648)
    

    set.seed(2147483648) 中的错误:提供的种子不是有效的整数 另外:警告信息: 在 set.seed(2147483648) 中:通过强制引入整数范围的 NAs

    【解决方案2】:

    您为什么对此感兴趣?通常你应该只设置一次种子,传递给它的数字应该是无关紧要的。

    无论如何:

    help("set.seed")
    

    seed:单个值,解释为整数或 NULL(请参阅 “详细信息”)。

    set.seed(.Machine$integer.max)
    set.seed(.Machine$integer.max + 1)
    #Error in set.seed(.Machine$integer.max + 1) : 
    #  supplied seed is not a valid integer
    #In addition: Warning message:
    #In set.seed(.Machine$integer.max + 1) :
    #  NAs introduced by coercion to integer range
    
    .Machine$integer.max
    #[1] 2147483647
    

    【讨论】:

    • 如果每次都想要相同的样本,则需要在每个样本之前设置种子
    • @germcd 那不正确。从同一个种子开始,随机数的序列总是相同的。为每个随机数设置一个新种子实际上是一种不好的做法,因为这会降低随机性。
    • OP 说他每次都想要相同的子集,这意味着在每个样本之前设置种子。
    • 这里可能存在一些误传。 OP 的请求只有在他们打算抽取许多样本时才有意义,每个样本都有自己的set.seed。像for(i in 1:n) {set.seed(i); x[i] <- rnorm(1)} 这样的东西。那不是他们应该做的事情。如果您需要在同一个 R 会话中的每次抽奖中使用相同的样本,您应该只存储该样本。如果您在不同的 R 会话中需要相同的样本,您仍然只需要一个种子。
    • 是的,我认为有一些误解。我假设操作在同一个会话中多次采样并且每次都获得不同的样本。
    猜你喜欢
    • 2015-05-21
    • 2011-06-15
    • 2021-12-25
    • 2011-05-05
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多