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

在gtsummary的add_p()中执行Friedman检验报错求助

解决gtsummary中add_p()自定义Friedman检验的未使用参数错误

在使用gtsummary包的tbl_summary()后调用add_p()执行Friedman检验时,由于Friedman检验要求区组(patient)数据完整,因此自定义函数来排除存在缺失值的区组,但运行代码后出现未使用参数的错误。

原代码

library(tidyverse)
library(gtsummary)
library(rstatix)

set.seed(123)
df <- data.frame(
  patient = c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9,10,10,10),
  round = c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
  q1 = rnorm(30, mean = 10, sd = 2),
  q3 = c(rnorm(25, mean = 10, sd = 2), NA, NA, NA, NA, NA)
)

# 注:原代码中df1_clean未定义,应为df
df %>%
  select(patient, round, q1, q3) %>%
  tbl_summary(
    by = round,
    type = list(
      q1 ~ "continuous2",
      q3 ~ "continuous2"
    ),
    include = - patient
  ) %>%
  add_p(
    all_continuous2() ~ function(x) {
        df %>%
            group_by(patient) %>%  
            filter(!any(is.na(x))) %>%  
            mutate(patient = factor(patient)) %>% 
            ungroup() %>% 
            friedman_test(
                formula = as.formula(paste0(x, " ~ round | patient"))
            ) %>% tidy() 
    }
  )

报错信息(翻译后)

在执行add_p()时返回以下错误:
✖ 针对变量q1(分组变量round)和"p.value"统计量:存在未使用的参数(data = ..., variable = "q1", by = "round", ...)
✖ 针对变量q3(分组变量round)和"p.value"统计量:存在未使用的参数(data = ..., variable = "q3", by = "round", ...)

错误原因

add_p()会自动向自定义检验函数传递多个参数(包括当前处理的数据集data、变量名variable、分组变量by等),但原函数仅定义了x作为参数,导致多余参数无法被接收,触发"未使用参数"错误。同时原代码中df1_clean未定义,属于笔误。

修正后的代码

library(tidyverse)
library(gtsummary)
library(rstatix)

set.seed(123)
df <- data.frame(
  patient = c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9,10,10,10),
  round = c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
  q1 = rnorm(30, mean = 10, sd = 2),
  q3 = c(rnorm(25, mean = 10, sd = 2), NA, NA, NA, NA, NA)
)

df %>%
  select(patient, round, q1, q3) %>%
  tbl_summary(
    by = round,
    type = list(
      q1 ~ "continuous2",
      q3 ~ "continuous2"
    ),
    include = - patient
  ) %>%
  add_p(
    all_continuous2() ~ function(data, variable, ...) {
      # 过滤当前变量无缺失的区组
      data_clean <- data %>%
        group_by(patient) %>%
        filter(!any(is.na(.data[[variable]]))) %>%
        ungroup() %>%
        mutate(patient = factor(patient))
      
      # 执行Friedman检验并整理结果
      friedman_test(
        data = data_clean,
        formula = as.formula(paste0(variable, " ~ round | patient"))
      ) %>%
        tidy()
    }
  )

修正说明

  1. 自定义函数添加data、variable和...参数,接收add_p()传递的所有参数,避免未使用参数错误
  2. 使用data参数获取当前处理的数据集,而不是外部全局变量,保证数据一致性
  3. 通过.data[[variable]]引用当前变量,兼容gtsummary的变量传递逻辑
  4. 修复原代码中df1_clean未定义的笔误

内容的提问来源于stack exchange,提问作者Doc-Data

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:05:55