我需要创建一个长度为4的向量,以使元素中的2个为1,其他2个为0,并且在某个位置出现的数字是随机的。
例如,第一个模拟为[1,1,0,0]。第二个模拟可能是[1、0、1、0]或其他。
我尝试了如下代码:
sample(x = c(0,1), size = 4, replace = TRUE, prob = 0.5)
但是它只是返回一个随机数为1和0的列表。
是否可以在不使用for或while循环的情况下建立这样的列表?
答案 0 :(得分:3)
您可以为prob
参数提供两个值,但这不能保证分布相等。
sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 1 0 0 1
sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 1 1 0 1
sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 0 0 0 1
您可以做的是使用rep
创建向量,然后使用sample
进行随机性
sample(rep(c(1, 0), 2))
#[1] 0 1 0 1
sample(rep(c(1, 0), 2))
#[1] 0 0 1 1
sample(rep(c(1, 0), 2))
#[1] 1 1 0 0
sample(rep(c(1, 0), 2))
#[1] 0 1 1 0
如果您有不同的向量长度,这也可以使用,因为我们可以使用times
参数
n <- 11
sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 0 1 0 1 1 0 0 0 0 0
sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 1 0 0 0 0 1 0 0 0 1
sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 1 0 0 0 0 1 0 0 0 1