我想创建一个类似这样的列表/向量:
c(0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1)
或者c(0,0,1,0,1,0,1,1,1,1,0,1,0,1,1,0,1)
这个向量的长度是一个变量“X”,而0和1的位置是完全随机的。
我想创建一个类似这样的列表/向量:
c(0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1)
或者c(0,0,1,0,1,0,1,1,1,1,0,1,0,1,1,0,1)
这个向量的长度是一个变量“X”,而0和1的位置是完全随机的。
X <- rbinom(20, 1, 0.5)
这是一个随机二项分布的生成函数,它将创建一个长度为20的向量 'X',其中包含 '0' 和 '1',成功概率为0.5。以下是输出结果。
> X
[1] 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1
这可以通过从二进制数字集合中 带有替换 进行抽样来完成:
n <- 10 # sample size
sample(c(0,1), replace=TRUE, size=n)
顺带一提,如果你希望出于任何原因精确复制上述两个向量,你需要更改随机数生成器的种子:
set.seed(194842)
sample(c(0,1), replace=TRUE, size=21)
## [1] 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
set.seed(153291)
sample(c(0,1), replace=TRUE, size=17)
## [1] 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 0 1
sample(2)-1
,这样就不必在sample
函数中写c(0,1)
了。我认为这样做也会更快一些。 - Rich Scrivensize
很大,那么它不会更快,因为-1
会导致额外的分配和循环。此外,如果想要速度,可以使用sample.int
。 - jangorecki