我正在尝试编写一个函数,该函数需要几行代码,并允许我输入一个变量。我下面有使用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)
}
答案 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
,但从未使用过。在函数定义中,您有一个任意的空间< -
。它永远都行不通。
我建议您首先定义一个函数,该函数计算两个数字的和,或连接两个字符串。开始here或here。然后,您可以返回Kaplan-Meier的内容。
第二,在另一个或两个类中,您将需要了解函数的三个部分。您将需要了解函数的范围。在开始复制和粘贴之前,您不妨先研究一下基础知识。
第三,在您发布其他问题之前,请阅读How to make a great R reproducible example?。
好运。