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 :

R Shiny retourner vecteurs de différentes tailles


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 71
    Points : 67
    Points
    67
    Par défaut R Shiny retourner vecteurs de différentes tailles
    Bonjour,

    Je réalise un programme R Shiny à partir du modèle suivant : http://shiny.rstudio.com/gallery/ret...imulation.html mais je rencontre quelques difficultés.

    Pour simplifier pour l'instant, on va dire qu'on a une équation y=ax+b et je souhaite construire la fonction. L'utilisateur rentre ainsi les paramètres a, x et b. Avec x, l'étendue de la fonction.

    Extrait du code de server.R

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    plot_nav<- function(x0=200,a=-1.7/10000,b=0.017,inc=0.5) {
      x<-seq(0,x0,inc)
     
      return(list(a=a,x=x))
    }
     
    plot_nav <- function(x) {
      y<-(a)*x+b
     
      eps<-0.000000001
      y[y<=eps]<-eps
     
      plot(0,0,type="n",xlim=range(x),ylim=c(0,max(y)))
      lines(x,y,col=2)
     
    }
    J'ai un problème entre le return et le plot_nav<-function(). Comment je peux arranger ça ?

    Merci par avance.

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Quelques questions afin de mieux comprendre votre problème :

    1/ Est-ce normal que votre code contienne deux fonctions portant exactement le même nom "plot_nav" ?
    En effet, l'une va forcément écraser l'autre à un moment donné...

    2/ La seconde fonction "plot_nav" fait appel à des paramètre "a" et "b" qui ne semblent ni passés en arguments de la fonction (ie. spécifiés dans les parenthèses initiales, comme le "x"), ni être définis au sein de la fonction elle-même. Cela ne peut donc pas fonctionner tel quel...

    3/ Quel est le problème / l'erreur que vous rencontrez et qui vous pose problème ? En effet, difficile de savoir avec le seul morceau de code que vous nous fournissez.


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 71
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Oui exact, j'avais mal recopié le code, la première fonction avait un autre nom.

    Mais finalement, le modèle à partir duquel je voulais m'inspirer n'était pas évident et ne ressemblait pas à la manière dont j'avais l'habitude de coder pour R Shiny.

    Donc j'ai tout repris, et voilà ce que ça donne. J'ai de nouveau adapté/simplifié le programme mais je vous montre suffisamment d'éléments afin qu'il puisse être exécuté.

    server.R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    library(shiny)
     
    shinyServer(function(input, output) {
     
      mydata <- reactive({
        inc<-input$inc
        x<-seq(0,input$x0,inc)
        a1<-input$a1
        b1<-input$b1    
     
        h1<-(a1)*x+b1
        h2<-(1.4/27^1.4)*x^0.4
     
     
        #replace negatives numbers by 0+ to set a level to not start at 0
        eps<-0.000000001
        h1[h1<=eps]<-eps
        h2[h2<=eps]<-eps
     
        list(x=x,h1=h1,h2=h2)
     
      })
     
      output$graph1<-renderPlot({
        data<-mydata()
        p<-plot(0,0,type="n",xlab="x",ylab="y",xlim=range(data$x),ylim=c(0,max(data$h1+data$h2)))
        lines(data$x,data$h1,col="red")
        lines(data$x,data$h2,col="green")
        lines(data$x,data$h1+data$h2,col="black")
        legend("topleft",c("event 1","event 2","total"),col=c("red","green","black"),lty=1)
     
        print(p)
     
      })
     
    })
    ui.R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    library(shiny)
     
    shinyUI(pageWithSidebar(
      headerPanel("Simulation"),
      sidebarPanel(
        numericInput("inc", "Precision time: ", 0.5),
        numericInput("x0", "x : ", 200),
        #h1=a1*x+b1
        numericInput("a1", "a1: ", -1.7/10000),
        numericInput("b1", "b1: ", 0.017)
      ),
     
      mainPanel(
        plotOutput("graph1")
      )
    ))
    Maintenant il me reste qq pb :
    • le programme mettant du tps à s'exécuter, je ne voudrais pas qu'il s'exécute dès que je modifie une entrée mais plutôt par l'intermédiaire d'un bouton. Afin que je puisse modifier plusieurs entrées avant de l'exécuter ;
    • j'aimerai ne pas simplement proposer de fonction affine à l'utilisateur, mais n'importe quelle fonction (comme h2 par exemple).

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Merci pour la mise à jour du code, c'est plus facile pour tester comme ça

    1/ Personnellement ça ne met pas de temps à s'exécuter chez moi, c'est instantané, donc je ne suis pas sûre que ça vaille le coup de rajouter un bouton pour lancer l'action, ça risque d'alourdir le tout... Après, sinon, voir du côté des "action button" (par exemple : http://shiny.rstudio.com/gallery/actionbutton-demo.html).

    2/ Je ne comprends pas bien votre besoin pour ce point... Vous pouvez peut-être ajouter une liste déroulante pour la sélection de différentes fonctions ? Dîtes-nous en plus sinon


    HTH !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 71
    Points : 67
    Points
    67
    Par défaut
    Oui c'est bon, j'ai entre temps mis en place le bouton action, merci

    Comme je disais, j'ai seulement présenté un extrait de mon programme. Le vrai programme contient différentes fonctions et réalise un grand nombre de simulations, il met qq minutes à s'exécuter. Je pense y ajouter une barre de progression comme dans cet exemple : http://shiny.rstudio.com/gallery/pro...r-example.html

    Ah merci, c'est une bonne idée la liste déroulante.

    Cordialement,

    Aleksik

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

Discussions similaires

  1. Composant pour stocker des images de différentes tailles
    Par CrocoB dans le forum Composants VCL
    Réponses: 17
    Dernier message: 18/09/2007, 18h50
  2. [ComboBox] Retourner une valeur différente de ComboBox.Text
    Par nicolas.pied dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/02/2007, 20h01
  3. Creer une appli visualisable sous différentes tailles d'écran?
    Par UnSofteuxAmateur dans le forum Delphi
    Réponses: 3
    Dernier message: 13/12/2006, 22h41
  4. Réponses: 3
    Dernier message: 19/11/2006, 15h40
  5. Réponses: 2
    Dernier message: 07/10/2004, 17h00

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