Суть проблемы, с которой вы столкнулись, на самом деле является жестким камнем преткновения для первоначального выяснения: как передать имена столбцов переменных или данных в функцию . Я создал несколько примеров данных. В приведенном ниже примере я предоставляю функции четыре переменные, одной из которых являются ваши данные. Вы можете увидеть два способа, которыми я вызываю столбцы, используя [[]]
и [,]
, которые вы можете считать эквивалентными использованию $
. Вне функций они есть, но не внутри. Функции 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
обрабатывает переменные и где их ищет . Из того, что я могу сказать, вы сталкиваетесь с этим, потому что есть , возможно, ошибка в ggsurvplot
, и вы смотрите на глобальную среду для переменных, а не внутри функции. Они закрыли вопрос, но, насколько я могу судить, он все еще там. При попытке запустить строку ggsurvplot
вы получите сообщение об ошибке, которое вы получите, если не укажите переменную:
Error in eval(inp, data, env) : object 'surv_object' not found.
Надеюсь, это поможет. Я бы отправил отчет об ошибке на вашем месте.
1024 * редактировать *
Я надеялся , это решение поможет , но это не так.
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