提问人:trinhtran 提问时间:9/19/2023 最后编辑:trinhtran 更新时间:9/19/2023 访问量:26
R:tidy_add_n() 在使用 reformulate/as.formula 循环 Cox 模型的许多列时不起作用
R: tidy_add_n() doesn't work when looping over many columns for Cox models with reformulate/as.formula
问:
我想为 Cox 模型运行一个循环,该模型针对协变量的不同子集进行调整。期望的产出应包括事件数、人年、风险比和 95% CI。如果我直接调用,则可以完美地工作,但是当我在循环中使用任何一个或时,该函数不会创建n_event和曝光两列,而是创建一个名为 n 的新列,该列仅包含缺失值。任何解决此问题或解决方法的想法或建议将不胜感激。谢谢!coxph
tidy_add_n
reformulate
as.formula
以下是可重现的代码。
test1 <- list(time = c(4,3,1,1,2,2,3),
status = c(1,1,1,0,1,1,0),
x1 = as.factor(c(0,2,1,1,1,0,0)),
x2 = as.factor(c(0,0,0,0,1,1,1)))
#the function works if I call coxph directly
coxph(Surv(time, status) ~ x1 + x2, test1) %>%
tidy_and_attach()%>%
tidy_add_reference_rows() %>%
tidy_add_estimate_to_reference_rows() %>%
tidy_add_header_rows() %>%
tidy_add_n()
#tidy_add_n does not work when I use reformulate or as.formula.
surv <- "Surv(time, status)"
c("x1","x2")%>%
reformulate(response = surv)%>%
coxph(data = test1)%>%
tidy_and_attach()%>%
tidy_add_reference_rows() %>%
tidy_add_estimate_to_reference_rows() %>%
tidy_add_header_rows() %>%
tidy_add_n()
答:
0赞
gladys_c_hugh
9/19/2023
#1
我不知道为什么,但这与 magrittr 管道与新的原生管道有关.%>%
|>
model <- coxph(Surv(time, status) ~ x1 + x2, test1) %>%
tidy_and_attach()%>%
tidy_add_reference_rows() %>%
tidy_add_estimate_to_reference_rows() %>%
tidy_add_header_rows() %>%
tidy_add_n()
surv <- "Surv(time, status)"
model2 <- c("x1","x2") |>
reformulate(response = surv) |>
coxph(data = test1) |>
tidy_and_attach() |>
tidy_add_reference_rows() |>
tidy_add_estimate_to_reference_rows() |>
tidy_add_header_rows() |>
tidy_add_n()
all.equal(model %>% data.frame(), model2 %>% data.frame())
你得到输出:
[1] TRUE
(将两者转换为 data.frame() 会删除属性,尽管生成的 tibbs 在控制台中看起来相同,但由于某种原因,这些属性仍然不同)。
具有更多 R 知识的人可能会发现这有助于诊断发生这种情况的原因。但是,如果您只是想要修复 - 请使用新管道。
编辑:
只有输出需要更改为本机管道才能使“修复”起作用:reformulate
model2 <- c("x1","x2") %>%
reformulate(response = surv) |>
coxph(data = test1) %>%
tidy_and_attach() %>%
tidy_add_reference_rows() %>%
tidy_add_estimate_to_reference_rows() %>%
tidy_add_header_rows() %>%
tidy_add_n()
all.equal(model %>% data.frame(), model2 %>% data.frame())
[1] TRUE
评论
0赞
trinhtran
9/19/2023
这非常有效!谢谢!
评论