【问题标题】:Need some help writing a function需要一些帮助来编写一个函数
【发布时间】:2018-12-07 23:59:21
【问题描述】:

我正在尝试编写一个需要几行代码并允许我输入单个变量的函数。我有下面的代码,它使用 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)
}

【问题讨论】:

    标签: r function survival-analysis


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      这是作业,对吧?

      首先,您需要先尝试运行代码,然后再将其作为示例提供。您的示例有几个致命错误。 ggsurvplot() 需要图书馆调用 survminer 或被如下召唤:survminer::ggsurvplot()

      您已经定义了一个函数f,但您从未使用过它。在函数定义中,你有一个任性的空间&lt; -。它永远不会奏效。

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

      其次,在另一个或两个类中,您需要了解函数的三个部分。您将需要了解函数的范围。在开始复制和粘贴之前,您不妨深入了解基础知识。

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

      祝你好运。

      【讨论】:

      • 在你认为我是一名寻求家庭作业帮助的学生之前,你一直拥有我。我是一名试图在空闲时间学习 R 的医生,这样我就可以更好地与我的生物信息学同事互动。我正在阅读一些文本,但也喜欢这样的互动设置。我已经看到并尝试了具有简单数字运算的函数,并且发现它们比将函数调用到数据帧的列更直接。我会检查你的链接,我想我会自己努力,直到我自己的掌握程度达到我能弄明白的程度。我以后会更清楚。
      • 罗伯特哈多,你可以回答一个问题,而不用贬低别人。 Be nice。 @Mike C,提供一个小数据集来重现错误将在未来有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多