使用stats包的自定义R函数出现unused argument错误求助
问题解决:加权统计函数的管道适配与数据处理修正
核心问题分析
你遇到的错误源于两个关键问题:
- 数据创建语法错误:R中初始化向量必须用
c()而非();且未将向量组合成指定的数据框dataset_a。 - 函数未适配tidyverse管道逻辑:管道会自动把左侧数据集作为第一个参数传给右侧函数,但你的函数未定义数据集参数,导致参数匹配混乱。
修正后的完整代码
library(tidyverse) library(spatstat) # 修正:正确创建示例数据框 Ind1 <- c(0, 0, 290.50, 100, 0, 150.00, 2000.00, 1350.50, 320.00, 30.00) firstwt <- c(0.974, 2.11, 1.81, 0.817, 3.85, 2.33, 1.41, 1.37, 1.83, 1.57) dataset_a <- tibble(Ind1, firstwt) # 修正:适配管道的统计函数 summary_stats <- function(.data, indicator, weight) { .data %>% summarise( weighted_mean = stats::weighted.mean({{indicator}}, {{weight}}, na.rm = TRUE), weighted_median = weighted.median({{indicator}}, {{weight}}, na.rm = TRUE) ) } # 正确调用函数 dataset_a %>% summary_stats(Ind1, weight = firstwt)
关键修正说明
数据创建修正
- 用
c()替代()创建数值向量,这是R中向量初始化的标准语法。 - 用
tibble()将向量组合成数据框dataset_a,确保后续管道调用有正确的数据源。
- 用
函数适配管道逻辑
- 将
.data设为函数第一个参数,接收管道传递的数据集。 - 使用
{{}}(整洁评估语法)引用列参数,让函数能识别数据框中的列名,避免参数传递错误。 - 函数内部用管道连接
summarise,保持tidyverse风格的一致性。
- 将
多数据集对比方案
若要对比两个数据集的统计结果,可按以下方式扩展:
# 创建第二个对比数据集(示例) dataset_b <- dataset_a %>% mutate(Ind1 = Ind1 * 1.2, firstwt = firstwt * 0.9) # 批量计算并合并对比结果 bind_rows( dataset_a %>% summary_stats(Ind1, firstwt) %>% mutate(dataset = "A"), dataset_b %>% summary_stats(Ind1, firstwt) %>% mutate(dataset = "B") )
执行后可直接查看两个数据集的加权均值、中位数对比结果。
内容的提问来源于stack exchange,提问作者Pendragon
相关产品推荐
相关产品推荐

