R函数无法传递字符串变量:Cox回归模型标签不更新问题
解决Cox回归函数中动态重命名列的问题
你的问题出在rename(label_name = label)这一行——这里的label_name会被当成固定字符串,而不是你传入的变量值。要实现用变量动态指定列名,需要用dplyr的tidy eval语法,或者rename_with函数,下面给两种可行方案:
方案1:用!!和:=实现动态命名
修改函数里的重命名行,把原来的固定写法换成动态解析变量的形式:
library(tidyverse) library(finalfit) runcox <- function(df,dependent,exp_full,label_name="placeholder"){ coxdata <- df %>% finalfit(dependent, exp_full, exp_reduced, add_dependent_label = FALSE, keep_models = TRUE) %>% rename(!!label_name := label) %>% # 关键修改:用!!解析变量,:=绑定新列名 rename(" " = levels) %>% rename(" " = all) return(coxdata) }
!!会把变量label_name的值解析出来,:=则用来把解析后的值作为新的列名,替代原来的label列。
方案2:用rename_with函数
如果你觉得tidy eval的语法有点绕,也可以用rename_with来实现,写法更直观:
library(tidyverse) library(finalfit) runcox <- function(df,dependent,exp_full,label_name="placeholder"){ coxdata <- df %>% finalfit(dependent, exp_full, exp_reduced, add_dependent_label = FALSE, keep_models = TRUE) %>% rename_with(~ label_name, .cols = label) %>% # 指定要修改的列和新名称 rename(" " = levels) %>% rename(" " = all) return(coxdata) }
rename_with的第一个参数是新名称的函数(这里直接用变量值),.cols指定要重命名的目标列。
两种方案都能让你调用runcox(data,dependent,explanatory,"Overall Survival")时,成功把标签列改为"Overall Survival"。
内容的提问来源于stack exchange,提问作者spx31
相关产品推荐
相关产品推荐

