使用“floor”和“runif”生成随机数

3

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

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的值。 有人知道我做错了什么吗?谢谢。

将你的样本结果向下取整,这样才有意义。 - undefined
1
如果您想从0/1值的分布中进行抽样,请使用“rbinom”。 - undefined
4个回答

4
为了生成随机的整数数字0或1,您可以使用rbinom或sample。
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作为输出。


谢谢Ronak Shah!有没有更简单的方法直接生成1到0之间的随机数? - undefined
我一直使用runif,就像你已经使用的一样。你有遇到什么问题吗? - undefined
我尝试了 "x = runif(1000, min=0, max=1)" 这个方法。它可以工作,但是它生成的是小数。我想要生成的是 1 或者 0。我可以写一个额外的语句,ifelse x > 0.5, 1,0 ... 但是我想找到更直接的方法。你有什么想法吗?谢谢 - undefined
2
我明白了。如果你想要随机的0和1,可以使用sample函数 - sample(c(0, 1), 100, replace = TRUE) - undefined

1
round(stats::runif(1000), digits = 0)

在 runif 中,min 和 max 的默认值分别为 0 和 1。而 round() 则是将数字四舍五入为最接近的整数。

1

使用runif生成两个随机整数的另外两种方法:

a <-  round(runif(1000000, min=-0.5000001, max=1.4999999), 0)
table(a)

b <-  floor(runif(1000000, min=0.00000001, max=1.9999999))
table(b)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接