需要一些帮助编写函数

时间:2018-06-28 20:25:30

标签: r function survival-analysis

我正在尝试编写一个函数,该函数需要几行代码,并允许我输入一个变量。我下面有使用Surv函数(Survival包)创建对象的代码。第二行使用有问题的变量,在本例中为列为Variable_X的列,然后输出可以使用ggsurvplot可视化的数据。输出是Kaplan-Meier生存曲线。我想做的是具有一个函数,使我可以键入f(Variable_X)并可视化从数据中选择的任何列的输出KM曲线。我希望f(y)输出KM,就像我将y放置在〜Variable_X当前所在的位置一样。我对R并不陌生,对函数的工作方式也很陌生,我尝试了以下代码,但显然不起作用。我正在研究数据营并阅读帖子,但是我很难过,感谢您的帮助。

surv_object <- Surv(time = KMeier_DF$Followup_Duration, event = KMeier_DF$Death_Indicator)

fitX <- survfit(surv_object ~ Variable_X, data = KMeier_DF)

ggsurvplot(fitX, data = KMeier_DF, pval = TRUE)

 f<- function(x) {
 dat<-read.csv("T:/datafile.csv")
 KMeier_DF < - dat
 surv_object <- Surv(time = KMeier_DF$Followup_Duration, event = 
 KMeier_DF$Death_Indicator)
 fitX<-survfit(surv_object ~ x, data = KMeier_DF)
 PlotX<- ggsurvplot(fitX, data = KMeier_DF, pval = TRUE)
 return(PlotX)
}

2 个答案:

答案 0 :(得分:1)

您遇到的问题的症结实际上是一个很难解决的绊脚石:how to pass variable or dataframe column names into a function。我创建了一些示例数据。在下面的示例中,我提供了一个函数四个变量,其中之一是您的数据。您可以看到我在列上调用的两种方式,分别是使用[[]][,],您可以认为它们等同于使用$。在函数外部,它们在内部,但不是内部。这里的print函数只是向您显示数据。如果这些对象存在于您的全局环境中,请rm(surv_object)一步一步地删除它们,或全部rm(list = ls())清除它们。

duration <- c(1, 3, 4, 3, 3, 4, 2)
di <- c(1, 1, 0, 0, 0, 0, 1)
color <- c(1, 1, 2, 2, 3, 3, 4)
KMdf <- data.frame(duration, di, color)

testfun <- function(df, varb1, varb2, varb3) {
  surv_object <- Surv(time = df[[varb1]], event = df[ , varb2])
  print(surv_object)
  fitX <- survfit(surv_object ~ df[[varb3]], data = df)
  print(fitX)
#  plotx <- ggsurvplot(fitX, data = df, pval = TRUE) # this gives an error that surv_object is not found
#  return(plotx)
}

testfun(KMdf, "duration", "di", "color") # notice the use of quotes here, if not you'll get an error about object not found.

更好的是,您还有一个更艰难的绊脚石:r如何处理变量和where it looks for them。据我所知,您会遇到这种情况,因为ggsurvplot中有possibly a bug,并且在全局环境中查找变量,而不是在函数内部。他们解决了问题,但据我所知,它仍然存在。当您尝试运行ggsurvplot行时,会得到一个错误,如果不提供变量,则会出现此错误:

Error in eval(inp, data, env) : object 'surv_object' not found.

希望这会有所帮助。如果我是我,我会提交一个错误报告。

编辑

我希望this solution would help,但不是。

testfun <- function(df, varb1, varb2, varb3) {
  surv_object <- Surv(time = df[[varb1]], event = df[,varb2])
  print(surv_object)
  fitX <- survfit(surv_object ~ df[[varb3]], data = df)
  print(fitX)
  attr(fitX[['strata']], "names") <- c("color = 1", "color = 2", "color = 3", "color = 4")
  plotx <- ggsurvplot(fitX, data = df, pval = TRUE) # this gives an error that surv_object is not found
  return(plotx)
}

Error in eval(inp, data, env) : object 'surv_object' not found

答案 1 :(得分:0)

这是家庭作业,对不对?

首先,在提供示例之前,您需要尝试运行代码。您的示例有几个致命错误。 ggsurvplot()需要库调用survminer或被召唤如下:survminer::ggsurvplot()

您已经定义了函数f,但从未使用过。在函数定义中,您有一个任意的空间< -。它永远都行不通。

我建议您首先定义一个函数,该函数计算两个数字的和,或连接两个字符串。开始herehere。然后,您可以返回Kaplan-Meier的内容。

第二,在另一个或两个类中,您将需要了解函数的三个部分。您将需要了解函数的范围。在开始复制和粘贴之前,您不妨先研究一下基础知识。

第三,在您发布其他问题之前,请阅读How to make a great R reproducible example?

好运。