【问题标题】:Matching output of sample() with rbinom() in R?将样本()的输出与R中的rbinom()匹配?
【发布时间】:2018-11-13 03:50:05
【问题描述】:

也许这个问题太简单了,但在我下面的R 代码中,AB 不应该完全相同:

set.seed(0)
A <- sample(0:1, 50, prob = rep(.5, 2), replace = T) # 'A' is HERE
plot(table(A))

set.seed(0)
B <- rbinom(50, 1, .5)  # 'B' is HERE
plot(table(B))

【问题讨论】:

    标签: r random sampling resampling


    【解决方案1】:

    如果我们取“B”的否定,那将是相同的,即如果我们查看“B”的输出,它的 0 值与 A 中的 1 的位置相同,反之亦然

    identical(A, +!B)
    #[1] TRUE
    

    或者不是做否定,而是创建“A”,通过做相反的事情,即 1:0

    set.seed(0)
    A <- sample(1:0, 50, prob = rep(.5, 2), replace = TRUE)
    identical(A, B)
    #[1] TRUE
    

    【讨论】:

    • @rnorouzian 通过检查输出,rbinom 中的 1 和 0 对于每个位置都是相反的
    • @rnorouzian rbinom是用C实现的,可能要查源码。但是,我尝试了带有字符的sample,它几乎是相同的行为,即尝试使用sample(c("A", "B")sample(c("B", "A")sample(c("0", "1")sample(c("1", "0")(如此处)
    • @rnorouzian 这是一个有趣的问题,因为samplesample.int,它是用C 实现的。所以,如果你这样做pryr::show_c_source(.Internal(sample(n, size, replace, prob)) ),它将直接指向random.C 源代码跨度>
    • @rnorouzian 好像已经回答了 :=)
    • 阿克伦,谢谢。是的,答案是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2016-01-02
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多