Нужна помощь в написании функции - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь написать функцию, которая занимает несколько строк кода и позволяет вводить одну переменную. У меня есть код ниже, который создает объект с помощью функции Surv (пакет Survival). Во второй строке берется рассматриваемая переменная, в данном случае столбец, указанный как Variable_X, и выводятся данные, которые затем можно визуализировать с помощью ggsurvplot. Результатом является кривая выживания Каплана-Мейера. Я хотел бы иметь такую ​​функцию, чтобы я мог набирать f (Variable_X) и визуализировать выходную кривую КМ для любого столбца, который я выбрал из данных. Я хочу, чтобы f (y) вывел КМ, как если бы я поставил y там, где сейчас находится ~ Variable_X. Я новичок в R и очень плохо знаком с тем, как работают функции. Я пробовал приведенный ниже код, но он, очевидно, не работает. Я работаю через datacamp и читаю посты, но мне тяжело с этим, благодарю за любую помощь.

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 голосов
/ 29 июня 2018

Суть проблемы, с которой вы столкнулись, на самом деле является жестким камнем преткновения для первоначального выяснения: как передать имена столбцов переменных или данных в функцию . Я создал несколько примеров данных. В приведенном ниже примере я предоставляю функции четыре переменные, одной из которых являются ваши данные. Вы можете увидеть два способа, которыми я вызываю столбцы, используя [[]] и [,], которые вы можете считать эквивалентными использованию $. Вне функций они есть, но не внутри. Функции 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

0 голосов
/ 29 июня 2018

Это домашнее задание, верно?

Во-первых, вам нужно попробовать запустить код, прежде чем предоставить его в качестве примера. В вашем примере есть несколько фатальных ошибок. ggsurvplot() необходимо либо вызвать библиотеку в службу поддержки, либо вызвать ее следующим образом: survminer::ggsurvplot().

Вы определили функцию f, но никогда не использовали ее. В определении функции у вас есть странный пробел < -. Это никогда бы не сработало.

Я предлагаю вам начать с определения функции, которая вычисляет сумму двух чисел или объединяет две строки. Начните здесь или здесь . Затем вы можете вернуться к материалам Каплана-Мейера.

Во-вторых, в другом или другом классе вам нужно будет знать три части функции. Вам нужно будет понять объем функции. Вы можете также углубиться в основы, прежде чем начать копирование и вставку.

В-третьих, перед тем, как опубликовать другой вопрос, прочитайте Как сделать отличный воспроизводимый пример R? .

Удачи.

...