将对象传递给用户定义的函数

Pass Objects into User Defined Function

我想创建一个用户定义的函数来 运行 coxph 变量列表。这个公式运行很好:


summary(coxph(
  Surv(var1, factor(var1)) ~ var3, 
  data = df_wts))

但是如果我尝试将其转换为函数,我会不断收到“找不到对象”警告:


cox_fun <- function(x, y) {
summary(coxph(
  Surv(x, factor(y)) ~ var3, 
  data = df_wts))

什么都试过了,enquo(x)、{{}}、[[]]、!!、as.name() 等

任何解释为什么会发生这种情况?环境?谢谢!

首先你的 var3 似乎没有定义。你的 var1 是你的第二个代码 xy 这有点奇怪,最后你应该用 } 结束函数。试试这个代码:

cox_fun <- function(x, y) {
  summary(coxph(
    Surv(x, factor(x)) ~ y, 
    data = df_wts))}

想通了。主要问题是(我认为)环境没有延续下去。我通过添加对数据框本身的调用来修复它。不确定这是否有帮助,但这是更新后的代码

添加了一些额外的东西:

我想只输入一个值,所以我用粘贴功能命名变量

然后我将其添加到数据库中以确保 Surv() 确实正确处理了它

然后是一个快速函数,用于将函数应用于我的变量列表。干杯!


# Calculate Cox Function 
cox_fun <- function(i) {
  x <- paste0("fu_time_", enexprs(i))
  y <- paste0("fu_status_", enexprs(i))
  cox <- summary(coxph(
    Surv(df_wts[[x]], factor(df_wts[[y]]))~ prophied + 
      age + male + race_ethnicity + patient_regional_location + Obesity + Smoking + total_admits + chf + copd + diabwc + mld + cevd, 
    weights = ipw, 
    id = patient_id, 
    data = df_wts))
  tribble(~Outcome, ~`Odds Ratio`, ~`95% CI`, ~`P Value`,
          paste(i),
          round(cox$conf.int[1,1], digits = 2),
          paste0(round(cox$conf.int[1,3], digits = 2), "-", round(cox$conf.int[1,4], digits = 2)),
          round(cox$coefficients[1,6], digits = 2))
  
}

# Generate DF 
do.call(rbind, lapply(ade_int, cox_fun)) %>% 
  #write_csv(paste(Sys.Date(), "Table 3.csv")) 
  print(n=50)