将对象传递给用户定义的函数
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
是你的第二个代码 x
和 y
这有点奇怪,最后你应该用 }
结束函数。试试这个代码:
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)
我想创建一个用户定义的函数来 运行 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
是你的第二个代码 x
和 y
这有点奇怪,最后你应该用 }
结束函数。试试这个代码:
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)