我在R中编写了以下函数
Plots <- function (database, variable) {
fit <- survfit(Surv(database$Months) ~ variable, data = database)
ggsurvplot(fit, data = database, pval = TRUE)
surv_pvalue(fit, data = database)
}
当我这样称呼它Plots(DB,DB $ variable)时,出现以下错误:
Error in eval(inp, data, env) : object 'database' not found
起初,我认为传递变量存在问题,但是当我只保留第一行时:
Plots <- function (database, variable) {
fit <- survfit(Surv(database$Months) ~ variable, data = database)
}
效果很好。 当我只用print(database)替换它时,它也起作用。 因此,我认为该对象在首次使用后会以某种方式被删除或类似的东西。
有人遇到过这个吗? 任何想法都很棒:)
谢谢!
答案 0 :(得分:0)
您是正确的,该问题来自ggsurvplot。快速检查一下,我认为在github中报告了类似的问题。
ggsurvplot尝试在您提供的数据上使用此公式Surv(database$Months) ~ variable
,但在函数ggsurvplot()
中,您的数据不称为数据库。好吧,我希望它不要太混乱。
一种解决方法是将独立变量(yvar)和因变量(xvar)定义为字符串,然后将公式提供给feed:
Plots <- function (database, yvar,xvar) {
FORMULA = as.formula(paste("Surv(",yvar,") ~ ",xvar))
fit <- survfit(FORMULA, data = database)
fit$call$formula = FORMULA
list(
plot= ggsurvplot(fit, data=database,pval = TRUE),
p = surv_pvalue(fit, data = database)
)
}
Plots(lung,"time","ph.ecog")
$plot
$p
variable pval method pval.txt
1 ph.ecog 0.004561623 Log-rank p = 0.0046