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

R语言报错:non-numeric argument to binary operator 求助排查

解决R代码中的两个运算错误

错误原因及修复方案

  • 关于mean/(as.numeric(s)/sqrt(n))的报错
    你在计算t_st时误用了R内置函数mean作为数值,这里应该使用你设定的总体均值2,而非函数名。

  • 关于sd^2的报错
    这个错误由两个问题导致:

    1. 未定义变量n:代码中多次使用n但未提前赋值,需要在循环前明确定义n <- 20(对应你的抽样样本量)。
    2. 卡方统计量的运算符优先级错误:n-1*s**2/5**2会被R错误解析,正确的卡方统计量计算公式(基于样本方差)应为(n-1)*s/(5^2)(因为s是var(sample)得到的样本方差,对应公式中的s²)。

额外优化建议

  • 避免使用R内置函数名(如sample)作为变量名,改为my_sample可防止命名混淆。
  • 循环中使用append效率极低,建议预先分配向量空间,通过索引直接赋值,大幅提升运行速度。

修正后的完整代码

set.seed(1234)
n <- 20  # 定义样本量
iterations <- 10000

# 预先分配向量空间
S <- numeric(iterations)
Y_bar <- numeric(iterations)
Xsq <- numeric(iterations)
T_st <- numeric(iterations)

for (i in 1:iterations) {
  my_sample <- rnorm(n = n, mean = 2, sd = 5) 
  s <- var(my_sample)
  S[i] <- s
  
  y_bar <- mean(my_sample)
  Y_bar[i] <- y_bar
  
  # 修正卡方统计量计算
  xsq <- (n - 1) * s / (5^2)
  Xsq[i] <- xsq
  
  # 修正t统计量计算:用总体均值2替代mean函数
  t_st <- (y_bar - 2) / (s / sqrt(n))
  T_st[i] <- t_st
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:15:28