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

R代码调试求助:遇'na.rm'与'x'未找到错误及作业代码问题

解决R代码中的两个错误及作业完整实现

错误原因解析

  • 对象'na.rm'未找到:出现在select(X17856731, Y, T = 0)这类代码中,select函数语法错误——你试图在选择列时给T赋值为0,这会创建一个无效的新变量,后续操作中因逻辑混乱引发变量引用错误。
  • Error in unique(x) : object 'x' not found:出现在df_selects代码块,一是管道操作语法错误X17856731 :: selects完全无效,正确写法是X17856731 %>% select();二是引用了不存在的treatment变量,还错误地把Y变量重编码为处理组标识,逻辑完全错位,导致函数调用时找不到所需参数。

修正后的完整代码(对应作业三步要求)

# 加载必要包
library(tidyverse)
library(readr)
library(moments) # 提前加载,避免重复安装

# 读取数据(只需要读一次)
df <- read_csv("17856731.csv")
View(df)

# ---------------------- 第一步:描述性统计量与图表 ----------------------
# 自定义众数函数(修正参数传递逻辑)
get_mode <- function(x, na.rm = FALSE) {
  if (na.rm) {
    x <- na.omit(x)
  }
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

# 变量X的描述性统计
cat("变量X的描述性统计:\n")
cat("均值:", mean(df$X, na.rm = TRUE), "\n")
cat("中位数:", median(df$X, na.rm = TRUE), "\n")
cat("众数:", get_mode(df$X, na.rm = TRUE), "\n")
cat("方差:", var(df$X, na.rm = TRUE), "\n")
cat("标准差:", sd(df$X, na.rm = TRUE), "\n")
cat("偏度:", skewness(df$X, na.rm = TRUE), "\n")
cat("四分位距:", IQR(df$X, na.rm = TRUE), "\n\n")

# 变量Y的描述性统计
cat("变量Y的描述性统计:\n")
cat("均值:", mean(df$Y, na.rm = TRUE), "\n")
cat("中位数:", median(df$Y, na.rm = TRUE), "\n")
cat("众数:", get_mode(df$Y, na.rm = TRUE), "\n")
cat("方差:", var(df$Y, na.rm = TRUE), "\n")
cat("标准差:", sd(df$Y, na.rm = TRUE), "\n")
cat("偏度:", skewness(df$Y, na.rm = TRUE), "\n")
cat("四分位距:", IQR(df$Y, na.rm = TRUE), "\n\n")

# 变量分布图表
# X的直方图+密度曲线
ggplot(df, aes(x = X)) +
  geom_histogram(aes(y = after_stat(density)), bins = 30, fill = "lightblue", alpha = 0.7) +
  geom_density(color = "darkblue") +
  labs(title = "变量X的分布", x = "X", y = "密度") +
  theme_minimal()

# Y的直方图+密度曲线
ggplot(df, aes(x = Y)) +
  geom_histogram(aes(y = after_stat(density)), bins = 30, fill = "lightgreen", alpha = 0.7) +
  geom_density(color = "darkgreen") +
  labs(title = "变量Y的分布", x = "Y", y = "密度") +
  theme_minimal()

# ---------------------- 第二步:对比T=1和T=0时的Y值 ----------------------
# 分组计算Y的核心统计量
group_stats <- df %>%
  group_by(T) %>%
  summarize(
    mean_Y = mean(Y, na.rm = TRUE),
    median_Y = median(Y, na.rm = TRUE),
    sd_Y = sd(Y, na.rm = TRUE)
  )
print(group_stats)

# 可视化对比:箱线图
ggplot(df, aes(x = factor(T), y = Y)) +
  geom_boxplot(fill = c("pink", "lightyellow")) +
  labs(title = "不同处理组的Y值分布", x = "处理组(T=1为处理组,T=0为对照组)", y = "Y值") +
  theme_minimal()

# 可视化对比:密度曲线叠加
ggplot(df, aes(x = Y, color = factor(T), fill = factor(T))) +
  geom_density(alpha = 0.3) +
  labs(title = "不同处理组Y值的密度分布", x = "Y值", color = "处理组", fill = "处理组") +
  theme_minimal()

# ---------------------- 第三步:验证处理是否随机分配 ----------------------
# 方法1:连续协变量X的组间差异t检验
t_test_result <- t.test(X ~ T, data = df, na.rm = TRUE)
print(t_test_result)

# 可视化X在两组的分布
ggplot(df, aes(x = factor(T), y = X)) +
  geom_boxplot(fill = c("lightblue", "orange")) +
  labs(title = "不同处理组的X值分布", x = "处理组", y = "X值") +
  theme_minimal()

# 方法2:分类协变量的卡方检验(示例:将X转为三类)
df <- df %>% mutate(X_cat = cut(X, breaks = 3, labels = c("低", "中", "高")))
chi_test_result <- chisq.test(table(df$T, df$X_cat))
print(chi_test_result)

# 结论:若t检验/卡方检验的p值>0.05,说明两组协变量无显著差异,支持处理是随机分配的

关键修正点

  1. 数据只读取一次,避免冗余数据框
  2. 修正众数函数的na.rm参数逻辑,确保正常生效
  3. 替换错误的select写法,改用filter筛选行或正确选择列
  4. 修复管道操作语法错误,调整recode逻辑(基于现有T变量创建标签,而非修改Y)
  5. 补充作业要求的可视化图表与随机分配验证的统计方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:35:20