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

R语言Miner函数修改遇阻:需返回sum(r)除以2的出现次数

解决R语言Miner函数修改问题

我明白你遇到的问题了——你想把函数返回值从sum(r)改成sum(r)除以r中数字2的出现次数,但之前尝试的方法都失效,核心原因是原来的函数最后返回的是sum(r)这个数值,而不是构建出来的向量r本身,当你在return里直接用sum(r)/sum(r==2)时,r已经被求和变成单个数字,自然无法统计原向量中2的个数。

修改后的函数代码

Miner = function(n) {
  x = sample(c(2,3,5), 1, replace = TRUE, prob = c(1/3,1/3,1/3))
  if (n == 0) {
    r = 0
  } else if (x == 2) {
    r = c(2, Miner(n - 1))
  } else if (x == 3) {
    r = c(3, Miner(n))
  } else if (x == 5) {
    r = c(5, Miner(n))
  }
  
  # 计算总和与2的出现次数
  total_sum = sum(r)
  count_2 = sum(r == 2)
  
  # 处理除以0的边界情况(避免无2时报错)
  if (count_2 == 0) {
    warning("序列中未找到数字2,返回NA")
    return(NA)
  }
  
  return(total_sum / count_2)
}

关键修改说明

  1. 保留向量r的完整结构:在计算总和和2的个数之前,我们没有直接对r求和返回,而是先保留了递归构建的完整向量,这样sum(r == 2)才能正确统计向量中所有等于2的元素数量(每个元素判断后返回TRUE/FALSE,求和后就是出现次数)。
  2. 添加边界处理:如果递归生成的序列中没有2,直接除以0会报错,所以加了判断逻辑,返回NA并给出警告提示。

额外提醒

注意函数中的递归逻辑:当抽到3或5时,调用的是Miner(n)(n不递减),这可能导致无限递归(比如一直抽到3/5,永远触发不了n==0的终止条件),如果这不是你的预期逻辑,可以考虑把Miner(n)改成Miner(n-1)来保证递归能终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:33:07