【问题标题】:R: Generate Random Numbers with "floor" and "runif"R:使用“floor”和“runif”生成随机数
【发布时间】:2021-08-14 07:11:15
【问题描述】:

我正在使用 R 编程语言。我正在尝试生成 1 到 0 之间的随机整数。使用以下链接 (http://www.cookbook-r.com/Numbers/Generating_random_numbers/),我尝试使用此代码生成 0 到 1 之间的 1000 个随机整数:

x = floor(runif(1000, min=0, max=1))
y = floor(runif(1000, min=0, max=1))
group <- sample( LETTERS[1:2], 1000, replace=TRUE, prob=c(0.8,0.2) )

d = data.frame(x,y,group)
d$group = as.factor(d$group)

但是,“x”和“y”似乎都只有 0 的值。

有谁知道我做错了什么? 谢谢

【问题讨论】:

  • floor 将您的样本返回值向下舍入为整数,所以很有意义。
  • 如果您想从 0/1 值的分布中抽样,请使用 rbinom

标签: r random integer range


【解决方案1】:

要生成01 的随机整数 数,您可以使用rbinomsample

x <- rbinom(1000, 1, 0.5)
str(x)
# int [1:1000] 0 1 1 0 1 1 0 1 0 1 ...
x <- sample(0:1, 1000, TRUE)
str(x)
# int [1:1000] 1 0 0 0 1 1 1 0 0 0 ...

如果您只有01,那么使用逻辑 向量可能会更好,只允许TRUEFALSE

x <- sample(c(TRUE, FALSE), 1000, TRUE)
str(x)
# logi [1:1000] TRUE TRUE TRUE FALSE TRUE FALSE ...

【讨论】:

    【解决方案2】:

    来自?floor

    floor 接受单个数值参数 x 并返回一个数值向量,其中包含不大于 x 的相应元素的最大整数。

    让我们看一个例子来理解这一点-

    floor(c(5.3, 9.9, 6.5, 1.2))
    [1] 5 9 6 1
    

    floor 总是向下舍入到最接近的整数。在您的示例中,使用 runif 您生成的数字介于 0 和 1 之间,并且由于您使用的是 floor,因此所有数字都向下舍入为 0,因此您只能得到 0 作为输出。

    【讨论】:

    • 谢谢你罗纳克沙阿!有没有更简单的方法可以直接生成 1 到 0 之间的随机数?
    • 我一直使用runif,就像你已经使用的那样。您对此有什么问题吗?
    • 我试过 "x = runif(1000, min=0, max=1)" 。这有效,但它产生十进制数。我试图产生 1 或 0。我可以写一个额外的语句, ifelse x > 0.5, 1,0 ...但我试图找到一种更直接的方法。你有什么想法?谢谢
    • 我明白了。如果您想要随机的 0 和 1,请使用 sample - sample(c(0, 1), 100, replace = TRUE)
    【解决方案3】:
    round(stats::runif(1000), digits = 0)
    

    runif 中 min 和 max 的默认值是 0 和 1。 round() 舍入到最接近的整数。

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2016-05-23
      • 2016-10-22
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多