You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言仅当A>B时计算Bootstrap百分比差异的代码问题咨询

代码问题原因
  • 判断逻辑错误:原代码在抽样前判断原始向量A > B,R中向量逐元素比较会返回逻辑向量,if语句仅读取第一个元素的布尔值,无法判断抽样结果的大小关系
  • 抽样参数错误:sample()未指定size参数,默认抽取和原向量等长的10个样本,计算得到的长度为10的差异向量赋值给单个元素位置时仅会保留第一个值
  • 初始化逻辑问题:Per_Dif默认初始值为0,未满足计算条件的迭代不会修改对应位置值,最终结果会留存大量无意义的初始0值
修正后代码

如果需要每次独立从A、B中各抽1个样本,仅当A样本值大于B样本值时计算百分比差异,符合条件的结果存入向量,未符合条件的不保留,代码如下:

A <- c(13,5,8,1,23,4,7,2,14,27)
B <- c(5,7,0.5,10, 1,3, 0.7,2,0.8,4)

percentage_difference <- function(value, value_two) {   
  (value - value_two) / value
}  

n <- 10000 
Per_Dif <- c() # 初始化空向量,仅存入符合条件的结果
for (i in 1:n) {
  # 先各抽1个样本
  sample_a <- sample(A, size = 1, replace = T)
  sample_b <- sample(B, size = 1, replace = T)
  # 再判断抽样值大小
  if(sample_a > sample_b){
    Per_Dif <- c(Per_Dif, percentage_difference(sample_a, sample_b))
  }    
}

如果需要配对抽样(每次抽取相同的索引,取A、B对应位置的数值配对),仅当配对的A值大于B值时计算差异,调整循环内的抽样逻辑即可:

for (i in 1:n) {
  # 抽取索引,对应取A、B的配对值
  sample_idx <- sample(1:length(A), size = 1, replace = T)
  sample_a <- A[sample_idx]
  sample_b <- B[sample_idx]
  if(sample_a > sample_b){
    Per_Dif <- c(Per_Dif, percentage_difference(sample_a, sample_b))
  }    
}

如果需要保持结果长度和迭代次数一致,不符合条件的位置标记为缺失值,可将初始化改为Per_Dif <- rep(NA, n),不满足判断条件时为Per_Dif[i]赋值NA即可。

内容的提问来源于stack exchange,提问作者SM87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:24:03