Y sont des variables globales en R Brillant?

Comment déclarer des variables globales en R Brillant, de sorte que vous n'avez pas besoin d'exécuter les mêmes morceaux de code plusieurs fois? Comme un exemple très simple, j'ai 2 parcelles qui utilisent exactement les mêmes données, mais je ne veux calculer les données une seule FOIS.

Ici est la de l'interface utilisateur.R fichier:

library(shiny)

# Define UI for application that plots random distributions 
shinyUI(pageWithSidebar(

# Application title
headerPanel("Hello Shiny!"),

# Sidebar with a slider input for number of observations
sidebarPanel(
sliderInput("obs", 
            "Number of observations:", 
            min = 1,
            max = 1000, 
            value = 500)
  ),

# Show a plot of the generated distribution
 mainPanel(
   plotOutput("distPlot1"),
  plotOutput("distPlot2")
 )
))

Ici est la serveur.R fichier:

library(shiny)

shinyServer(function(input, output) {

  output$distPlot1 <- renderPlot({ 
    dist <- rnorm(input$obs)
    hist(dist)
  })

  output$distPlot2 <- renderPlot({ 
    dist <- rnorm(input$obs)
    plot(dist)
  })

})

D'avis que les deux output$distPlot1 et output$distPlot2 ne dist <- rnorm(input$obs) qui est de ré-exécuter le même code deux fois. Comment faire pour que la "dist" vecteur d'exécuter une seule fois et de le rendre disponible à tous les renderplot fonctions? J'ai essayé de mettre de la distance à l'extérieur de l'fonctions telles que:

library(shiny)

shinyServer(function(input, output) {

  dist <- rnorm(input$obs)

  output$distPlot1 <- renderPlot({ 
    hist(dist)
  })

  output$distPlot2 <- renderPlot({ 
    plot(dist)
  })

})

Mais j'obtiens un message d'erreur indiquant que la "dist" l'objet n'est pas trouvé. C'est un jouet exemple dans mon code j'ai 50 lignes de code que je suis le coller dans plusieurs "Rendre..." de la fonction. Toute aide?

Oh oui, si vous voulez exécuter ce code il suffit de créer un fichier et de l'exécuter ceci:
bibliothèque(brillant)
getwd()
exécuterapplication("C:/Desktop/R Projets/testShiny")

où "testShiny" est le nom de mon R studio de projet.

  • Il suffit de ne dist <- reactive(rnorm(input$obs)). Maintenant, vous pouvez l'utiliser comme dist() dans vos fonctions.
  • Oui ça fonctionne, mais que faites-vous quand vous avez 50 lignes de code qui est nécessaire pour calcualte dist?
  • Il suffit de mettre la 50 lignes à l'intérieur de reactive({...}) renvoyant la valeur de dist dans la dernière ligne. reactive est juste un wrapper qui rend son contenu réactif.
  • ses meilleures pratiques à mettre l'essentiel de la fonction de la mondiale et de l'appeler à partir de réactifs(), de sorte que vous pouvez tester vos fonctions sans avoir à interrompre l'exécution lors de l'exécution de l'application
InformationsquelleAutor user3022875 | 2013-12-02