出于文档目的,我的部门要求我有模型的原始输出的副本,而不仅仅是我要保留和发布的部分的有组织的表。
例如,这是我编写的一个函数,用于运行CoxPH模型并将输出组织到表中。我有几个迭代的函数用于各种结果,我使用lapply()来调用它们。以下是代码的简化版本:
myfun <- function(x){
model <- summary(coxph(Surv(FAIL, DEAD)~ x + covariate1 + covariate2, data=df))
# just pull out the parts I need
results <- data.frame(cbind(model$conf.int[,c("exp(coef)",
"lower .95", "upper .95")],
coef(model)[,"Pr(>|z|)"]))
names(results) <- c("RR", "LL", "UL", "pval")
# format the the results for the table
results$answer <- paste0(format(round(results[,"RR"],2),2), " (",
format(round(results[,"LL"],2),2), ", ",
format(round(results[,"UL"],2),2), ")")
# drop all the results for covariates
results <-results[substr(row.names(results),1,nchar(expo))==expo,
c("answer","pval")]
return(results)
最终的“结果”只是主要自变量RR(95%CI)和p值的一个很好的干净数据框,一切运行正常。
当我调用该函数时:
outcomes <- c("DEAD","HEARTDISEASE","LUNGCANCER")
final.results <- lapply(outcomes, function(x) myfun(x))
在这种情况下,我得到了一个包含三个数据框的精美列表。我可以rbind()列表中的每个元素并将其导出到excel。 - 事实上,有更多的结果,仅限年龄的模型和完全调整的模型,以及几个主要的效果变量,但它基本上都像上面的代码一样工作 -
现在,我需要在控制台中打印Cox模型的原始摘要(),并且仍然保留我的有组织输出的最终列表。我通过在上面的代码中添加以下内容来完成此操作:
myfun <- function(x){
# all that code listed above #
# create a list to hold both raw output and my cleaned results
final <- list()
final$model <- model
final$results <- results
return(final)
然后在函数调用之后,我进行一些单独的编码,以便为每次迭代运行分离summary()部分,打印它们,然后对最终的有组织结果执行相同的操作。
理想情况下,我希望函数的每次迭代运行只返回漂亮的干净表,但是将整个摘要(模型)打印到控制台。如何在仍然可以使用lapply()调用的函数中实现这一点?
是否有一种更简单的方法,而不仅仅是创建一个巨大的所有内容列表并在所有模型运行后处理它?</ p>
谢谢。