我正在尝试制作一个KM曲线函数,但是,我不确定我哪里出错了。
library(tidyverse)
library(ggplot)
library(survival)
library(survminer)
km_curve <- function(df, tm, ev, predictor) {
surv_object <- Surv(time = df$tm, event = df$ev)
fit1 <- survfit(surv_object ~ predictor, data = df)
ggsurvplot(fit1, data = df, pval = TRUE, xlab = "Months")
}
如果我将所有 df、tm、ev 和 Predictor 替换为实际名称,上面的代码就可以很好地工作。
我也试过这个
km_curve <- function(df, tm, ev, predictor) {
surv_object <- Surv(time = df[,tm], event = df[,ev])
fit1 <- survfit(surv_object ~ predictor, data = df)
ggsurvplot(fit1, data = df, pval = TRUE, xlab = "Months")
}
km_curve(df = first_primaries,
tm = pfs_time_months,
ev = pfs_fail.x,
predictor = risk)
我也尝试过
km_curve <- function(df, tm, ev, predictor) {
tim <- df %>%
select(tm)
even <- df %>%
select(ev)
surv_object <- Surv(time = tim, event = even)
fit1 <- survfit(surv_object ~ predictor, data = df)
ggsurvplot(fit1, data = df, pval = TRUE, xlab = "Months")
}
km_curve(df = first_primaries,
tm = pfs_time_months,
ev = pfs_fail.x,
predictor = risk)
它一直给我错误消息,指出 pf_time_months 未找到。即使它是我指定的数据框中的一列。
我的猜测(我必须猜测,因为你没有提供可重现的代码)是
pfs_time_months
和其他是df
的某些列的名称。这就是为什么那不起作用。如果使用此函数,您可以将它们作为字符串传递:
km_curve <- function(df, tm, ev, predictor) {
surv_object <- Surv(time = df[, tm], event = df[, ev])
f <- as.formula(sprintf("surv_object ~ %s", predictor))
fit1 <- survfit(f, data = df)
ggsurvplot(fit1, data = df, pval = TRUE, xlab = "Months")
}
km_curve(df = first_primaries,
tm = "pfs_time_months",
ev = "pfs_fail.x",
predictor = "risk"
)