在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() } )
修正说明
- 自定义函数添加
data、variable和...参数,接收add_p()传递的所有参数,避免未使用参数错误 - 使用
data参数获取当前处理的数据集,而不是外部全局变量,保证数据一致性 - 通过
.data[[variable]]引用当前变量,兼容gtsummary的变量传递逻辑 - 修复原代码中
df1_clean未定义的笔误
内容的提问来源于stack exchange,提问作者Doc-Data
相关产品推荐
相关产品推荐

