IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Utiliser ggsurvplot dans une fonction


Sujet :

R

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 5
    Par défaut Utiliser ggsurvplot dans une fonction
    Salut à tous, je veux tracer plusieurs courbe de survie donc je mets cela dans une fonction. Avant de passer par la fonction, je traçais mes courbes en utilisant ggsurvplot. Mais dans ma fonction j'utilise plot car ggsurvplot ne veut pas s'exécuter :

    Erreur dans x$formula : objet de type 'symbol' non indiçableErreur dans x$formula : objet de type 'symbol' non indiçable


    Savez-vous comment je pourrais utiliser ggsurvplot dans mon cas ? Je vous donne mon code dans un reprex, et deux fonctions, une avec plot et l'autre avec ggsurvplot. Juste au cas où, je travaille actuellement chez RmarkDown. Merci pour votre temps.

    generate_survival_analysis <- function(df, time_col, event_col, group_col, title, palette, level) {
    if (!is.data.frame(df)) {
    stop("L'argument 'df' doit être un data frame.")
    }
    df[[group_col]] <- factor(df[[group_col]], levels = level)
    surv_object <- Surv(time = df[[time_col]], event = df[[event_col]])
    formula <- as.formula(paste("surv_object ~", group_col))
    surv_fit <- survfit(formula, data = df)

    plot(
    surv_fit,
    main = title,
    xlab = "Temps",
    ylab = "Survie",
    xlim = c(0,50),
    col = palette[seq_along(surv_fit$strata)],
    lwd = 2,
    mark.time = TRUE,
    mark = 3
    )
    }

    generate_survival_analysis <- function(df, time_col, event_col, group_col, title, palette, level) {
    if (!is.data.frame(df)) {
    stop("L'argument 'df' doit être un data frame.")
    }
    df[[group_col]] <- factor(df[[group_col]], levels = level)
    surv_object <- Surv(time = df[[time_col]], event = df[[event_col]])
    formula <- as.formula(paste("surv_object ~", group_col))
    surv_fit <- survfit(formula, data = df)

    ggsurvplot(
    surv_fit,
    data = df,
    title = title,
    risk.table = TRUE,
    pval = TRUE,
    palette = palette,
    xlim = c(0, 50),
    xlab = "Temps",
    ylab = "Survie",
    ggtheme = theme_minimal()
    )
    }

    set.seed(123)
    df <- data.frame(
    time = c(5, 10, 15, 20, 25, 30, 35, 40, 45, 50),
    event = c(1, 1, 0, 1, 1, 0, 1, 1, 0, 1),
    group = c("A", "A", "A", "B", "B", "B", "B", "A", "B", "A")
    )
    group_levels <- c("A", "B")
    group_palette <- c("blue", "red")
    plot_title <- "Analyse de survie en fonction du groupe"

    generate_survival_analysis(df, time_col = "time", event_col = "event", group_col = "group",
    title = plot_title, palette = group_palette, level = group_levels)

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 5
    Par défaut
    Bonjour, ca s'est résolu en utilisant surv_fit au lieu de survfit


    generate_survival_analysis <- function(df, time_col, event_col, group_col, title, title_short, palette, level) {
    if (!is.data.frame(df)) {
    stop("L'argument 'df' doit être un data frame.")
    }

    df[[group_col]] <- factor(df[[group_col]], levels = level)

    surv_object <- Surv(time = df[[time_col]], event = df[[event_col]])

    formula <- as.formula(paste("surv_object ~", group_col))

    surv_fit <- surv_fit(formula, data = df)


    ggsurvplot_result <- ggsurvplot(
    surv_fit,
    data = df,
    title = title,
    legend.title = legend_title,
    legend.labs = legend_labs,
    risk.table = TRUE,
    risk.table.title = "Number at risk",
    pval = TRUE,
    palette = palette,
    xlim = c(0, max(surv_fit$time, na.rm = TRUE)),
    surv.scale = "percent",
    ylab = "Survival Probability",
    xlab = "Time (months)",
    ggtheme = theme_pubr() +
    theme(plot.title = element_text(hjust = 0.5, face = "bold")),
    tables.theme = theme_classic()
    )

    print(ggsurvplot_result)


    Citation Envoyé par laplanca Voir le message
    Salut à tous, je veux tracer plusieurs courbe de survie donc je mets cela dans une fonction. Avant de passer par la fonction, je traçais mes courbes en utilisant ggsurvplot. Mais dans ma fonction j'utilise plot car ggsurvplot ne veut pas s'exécuter :

    Erreur dans x$formula : objet de type 'symbol' non indiçableErreur dans x$formula : objet de type 'symbol' non indiçable


    Savez-vous comment je pourrais utiliser ggsurvplot dans mon cas ? Je vous donne mon code dans un reprex, et deux fonctions, une avec plot et l'autre avec ggsurvplot. Juste au cas où, je travaille actuellement chez RmarkDown. Merci pour votre temps.

    generate_survival_analysis <- function(df, time_col, event_col, group_col, title, palette, level) {
    if (!is.data.frame(df)) {
    stop("L'argument 'df' doit être un data frame.")
    }
    df[[group_col]] <- factor(df[[group_col]], levels = level)
    surv_object <- Surv(time = df[[time_col]], event = df[[event_col]])
    formula <- as.formula(paste("surv_object ~", group_col))
    surv_fit <- survfit(formula, data = df)

    plot(
    surv_fit,
    main = title,
    xlab = "Temps",
    ylab = "Survie",
    xlim = c(0,50),
    col = palette[seq_along(surv_fit$strata)],
    lwd = 2,
    mark.time = TRUE,
    mark = 3
    )
    }

    generate_survival_analysis <- function(df, time_col, event_col, group_col, title, palette, level) {
    if (!is.data.frame(df)) {
    stop("L'argument 'df' doit être un data frame.")
    }
    df[[group_col]] <- factor(df[[group_col]], levels = level)
    surv_object <- Surv(time = df[[time_col]], event = df[[event_col]])
    formula <- as.formula(paste("surv_object ~", group_col))
    surv_fit <- survfit(formula, data = df)

    ggsurvplot(
    surv_fit,
    data = df,
    title = title,
    risk.table = TRUE,
    pval = TRUE,
    palette = palette,
    xlim = c(0, 50),
    xlab = "Temps",
    ylab = "Survie",
    ggtheme = theme_minimal()
    )
    }

    set.seed(123)
    df <- data.frame(
    time = c(5, 10, 15, 20, 25, 30, 35, 40, 45, 50),
    event = c(1, 1, 0, 1, 1, 0, 1, 1, 0, 1),
    group = c("A", "A", "A", "B", "B", "B", "B", "A", "B", "A")
    )
    group_levels <- c("A", "B")
    group_palette <- c("blue", "red")
    plot_title <- "Analyse de survie en fonction du groupe"

    generate_survival_analysis(df, time_col = "time", event_col = "event", group_col = "group",
    title = plot_title, palette = group_palette, level = group_levels)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/12/2016, 10h41
  2. Utiliser variable dans une fonction
    Par mikael2235 dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2012, 14h39
  3. Utiliser un " dans une fonction comme séparateur
    Par nuFox dans le forum WinDev
    Réponses: 3
    Dernier message: 18/02/2009, 16h38
  4. Peut-on utiliser RECHERCHEV dans une fonction ?
    Par dany13 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/02/2008, 16h14
  5. Thread -> Utiliser Synchronize() dans une fonction
    Par Futixu dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/01/2007, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo