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

修改R代码:统计所有数字被抽取至少两次所需次数

修改R代码以统计每个数字被看到至少两次的抽取次数

原代码实现了收集1-100所有数字至少一次的抽取次数,要改成统计每个数字至少出现两次,核心是追踪每个数字的出现次数,而非仅判断是否出现过。以下是两种修改方案:

方案1:使用table更新计数(可读性强)

numbers <- 1:100
counts <- rep(0, length(numbers))  # 初始化每个数字的计数为0
names(counts) <- numbers  # 给计数向量命名,对应1-100的数字
counter <- 0

while(any(counts < 2)) {  # 循环条件:只要有数字出现次数不足2次就继续抽取
  new_sample <- sample(numbers, 5, replace = TRUE)
  # 统计本次抽取的各数字出现次数,并更新总计数
  sample_counts <- table(new_sample)
  counts[names(sample_counts)] <- counts[names(sample_counts)] + sample_counts
  counter <- counter + 1
  cat("Draw", counter, ":", paste(new_sample, collapse = ", "), "\n")
}

cat("All numbers have been seen at least twice after", counter, "draws.")

方案2:使用tabulate更新计数(性能更优)

针对1-100连续整数的场景,tabulate函数比table更高效:

numbers <- 1:100
counts <- integer(length(numbers))  # 初始化整数型计数向量,内存占用更低
counter <- 0

while(any(counts < 2)) {
  new_sample <- sample(numbers, 5, replace = TRUE)
  # 直接用tabulate统计本次抽取的数字频次,累加至总计数
  counts <- counts + tabulate(new_sample, nbins = length(numbers))
  counter <- counter + 1
  cat("Draw", counter, ":", paste(new_sample, collapse = ", "), "\n")
}

cat("All numbers have been seen at least twice after", counter, "draws.")

关键修改点

  • 新增counts向量替代原代码的sampled向量,专门追踪每个数字的出现次数,避免向量无限增长导致的性能问题。
  • 循环条件从判断unique(sampled)的长度,改为检查any(counts < 2)——只要存在数字出现次数不足2次,就继续循环。
  • 每次抽取后直接更新对应数字的计数,而非累加所有抽取结果后再统计,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:12:10