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

使用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)

关键修正说明

  1. 数据创建修正

    • 用c()替代()创建数值向量,这是R中向量初始化的标准语法。
    • 用tibble()将向量组合成数据框dataset_a,确保后续管道调用有正确的数据源。
  2. 函数适配管道逻辑

    • 将.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:33:16