使用gtsummary的tbl_uvregression触发“尝试应用非函数”错误求助
问题原因与解决方法
你的错误核心原因是在线性回归(lm)模型中使用了exponentiate = TRUE参数,这个参数仅适用于需要对系数进行指数化转换的模型(如逻辑回归glm(method="binomial")、Cox比例风险模型coxph等)。线性回归的系数为原始效应值,不需要指数化,强行设置该参数会导致内部函数调用出错,触发"attempt to apply non-function"错误。
另外,你的代码存在变量覆盖问题:将tbl_uvregression的输出结果(gtsummary表格对象)赋值给了cars,这会覆盖之前的数据集对象,后续运行lm时如果使用该变量会报错,建议将数据处理与表格生成分开执行。
修正后的代码如下:
library(gtsummary) library(tidyverse) packageVersion("gtsummary") # package 1.7.0 data("mtcars") # 先处理得到数据集 cars_data <- mtcars %>% dplyr::select(mpg, disp, cyl, hp) # 运行单变量回归表格,移除exponentiate参数 tbl_uvregression( data = cars_data, method = "lm", y = hp ) # 单独执行线性回归(使用原始数据集) lm(hp ~ mpg, data = cars_data) lm(hp ~ disp, data = cars_data) lm(hp ~ cyl, data = cars_data)
如果确实需要对线性回归系数做特殊转换(常规场景下不需要),可以在生成表格后通过modify_column()手动处理,但标准线性回归场景中,直接移除exponentiate = TRUE即可解决报错问题。
内容的提问来源于stack exchange,提问作者Lola92
相关产品推荐
相关产品推荐

