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

R语言roll2函数返回样本值而非求和结果的问题排查

解析R语言roll2函数初始版本出错的原因

错误代码的实际逻辑

你初始编写的函数,去掉控制台提示符+后,实际代码如下:

roll2 <- function(bones) {
  dice <- sample(bones, size = 2, replace = TRUE) + sum(dice)
}

出错原因拆解

  1. 逻辑错误:赋值语句的误用
    你原本想先通过sample生成两个骰子值存入dice,再计算它们的和返回,但错误地把sum(dice)和sample的结果用+运算符合并到了同一个赋值语句里。

  2. 变量作用域的问题
    执行sum(dice)时,函数内部的dice还未被定义,R会向上查找父环境(通常是全局环境)中是否存在同名变量。如果你的全局环境里之前定义过dice(比如测试时留下的),R就会用这个全局变量的求和结果,和sample生成的两个数值分别相加,最终得到一个长度为2的向量赋值给dice——而函数默认返回最后一行的赋值结果,所以你得到的是两个骰子值加全局dice和的结果,而非你预期的当前两个骰子值的和。

  3. 修改后的正确逻辑
    修改后的函数把代码拆分为两行:

roll2 <- function(bones) {
  dice <- sample(bones, size = 2, replace = TRUE)
  sum(dice)
}

先完成dice的赋值,此时函数内部已经有了dice变量,再执行sum(dice)就能正确计算当前两个骰子值的和,函数返回这个单个数值,符合预期。

关于参数传递的疑问

你担心的“未显式指定bones参数”不是问题,R支持位置参数传递,只要传入的参数顺序和函数定义的参数顺序一致,就可以正常运行,所以最后一行roll2(1:20)能正常工作是完全合理的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:20:41