在R语言中基于概率向量抽取0/1:10个样本的抽样需求
在R中按指定概率生成0/1数值序列
你可以通过以下两种方法生成符合要求的0/1数值:
方法一:使用rbinom函数(高效推荐)
rbinom支持向量形式的概率参数,适合批量生成伯努利随机数:
# 定义每个数值取0的概率向量 p0 <- c(0.1989185, 0.2879522, 0.1142932, 0.3057067, 0.2056559, 0.1492126, 0.2775737, 0.3332775, 0.9276861, 0.4373286) # 设置随机种子(可选,保证结果可复现) set.seed(123) # 生成结果:prob参数传入取1的概率(1 - 取0的概率) result <- rbinom(n = length(p0), size = 1, prob = 1 - p0) print(result)
运行后会输出10个0或1的数值,每个数值取0的概率对应p0中的元素。
方法二:使用sample函数(直观易懂)
如果需要更直白地指定0和1的抽取概率,可以用sapply循环处理每个概率:
p0 <- c(0.1989185, 0.2879522, 0.1142932, 0.3057067, 0.2056559, 0.1492126, 0.2775737, 0.3332775, 0.9276861, 0.4373286) set.seed(123) result <- sapply(p0, function(p) sample(c(0, 1), 1, prob = c(p, 1-p))) print(result)
这里sample函数每次从c(0,1)中抽取1个元素,概率分别为p(取0)和1-p(取1)。
说明
set.seed()用于固定随机数生成的初始状态,不需要固定结果的话可以删除该行。- 生成大量随机数时,
rbinom的效率远高于循环调用sample,优先推荐前者。
内容的提问来源于stack exchange,提问作者locket
相关产品推荐
相关产品推荐

