eval(inp,data,env)中的错误:找不到对象“数据库”

时间:2019-11-22 10:02:48

标签: r

我在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)替换它时,它也起作用。 因此,我认为该对象在首次使用后会以某种方式被删除或类似的东西。

有人遇到过这个吗? 任何想法都很棒:)

谢谢!

1 个答案:

答案 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

enter image description here