R语言报错:non-numeric argument to binary operator 求助排查
解决R代码中的两个运算错误
错误原因及修复方案
关于
mean/(as.numeric(s)/sqrt(n))的报错
你在计算t_st时误用了R内置函数mean作为数值,这里应该使用你设定的总体均值2,而非函数名。关于
sd^2的报错
这个错误由两个问题导致:- 未定义变量
n:代码中多次使用n但未提前赋值,需要在循环前明确定义n <- 20(对应你的抽样样本量)。 - 卡方统计量的运算符优先级错误:
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
相关产品推荐
相关产品推荐

