如何在R语言中生成带模式的向量/序列并构建概率表
嘿,看来你是想构建几何分布的概率表,同时好奇怎么高效生成那种特定模式的向量对吧?其实我们可以用R的向量化特性大幅简化代码,不用手动逐个创建x1到x4这类向量~
方法一:直接利用几何分布公式(最简洁高效)
你手动计算的概率本质上是几何分布的概率值:( P(X=k) = p \times (1-p)^k ),其中( p=0.1 ),( k )从0到4。直接用公式计算就行,完全不需要生成那些中间向量:
# 定义参数 k <- 0:4 p_success <- 0.1 # 计算概率 probabilities <- p_success * (1 - p_success)^k # 生成并输出表格 result_table <- data.frame(k, P = probabilities) write.table(result_table, row.names = FALSE, sep = "\t")
运行这段代码会直接得到你想要的结果:
k P 0 0.1 1 0.09 2 0.081 3 0.0729 4 0.06561
方法二:生成你要的模式向量(如果需要学习矩阵操作)
如果确实想生成那种“前m个1,后面都是0.9”的向量组,我们可以用矩阵来批量生成,再按列相乘得到目标乘积向量:
n <- 5 # 最终向量的长度 num_vectors <- 4 # 需要生成的向量数量 # 创建初始矩阵,所有元素为1 pattern_matrix <- matrix(1, nrow = num_vectors, ncol = n) # 给每行设置对应的0.9区域:第i行从第(n - i + 1)列开始变为0.9 for (i in 1:num_vectors) { pattern_matrix[i, (n - i + 1):n] <- 0.9 } # 按列相乘得到vec_mult vec_mult <- apply(pattern_matrix, 2, prod) # 计算概率并输出表格 p_success <- 0.1 k <- 0:(n-1) probabilities <- p_success * vec_mult write.table(data.frame(k, P = probabilities), row.names = FALSE, sep = "\t")
这段代码会先生成你想要的4个向量组成的矩阵,再通过列乘积得到vec_mult,最终和你手动计算的结果一致。不过显然第一种方法更直接,因为它抓住了问题的本质——这就是几何分布的概率计算~
内容的提问来源于stack exchange,提问作者cumin
相关产品推荐
相关产品推荐

