Как вы объявляете глобальные переменные с помощью R Shiny, чтобы вам не нужно было запускать одни и те же фрагменты кода несколько раз? В качестве очень простого примера у меня есть 2 графика, которые используют одни и те же точные данные, но я хочу только рассчитать данные ONCE.
Вот файл ui.R:
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")
)
))
Вот файл server.R:
library(shiny)
shinyServer(function(input, output) {
output$distPlot1 <- renderPlot({
dist <- rnorm(input$obs)
hist(dist)
})
output$distPlot2 <- renderPlot({
dist <- rnorm(input$obs)
plot(dist)
})
})
Обратите внимание, что оба output$distPlot1
и output$distPlot2
делают dist <- rnorm(input$obs)
, которые дважды повторяют один и тот же код. Как сделать вектор "dist" пробегающим один раз и сделать его доступным для всех функций renderplot? Я попытался поставить dist вне функций, например:
library(shiny)
shinyServer(function(input, output) {
dist <- rnorm(input$obs)
output$distPlot1 <- renderPlot({
hist(dist)
})
output$distPlot2 <- renderPlot({
plot(dist)
})
})
Но я получаю сообщение об ошибке, что объект dist не найден. Это пример игрушек в моем реальном коде. У меня есть 50 строк кода, которые я вставляю в несколько "Render...". Любая помощь?
О да, если вы хотите запустить этот код, просто создайте файл и запустите его: библиотека (блестящие) getwd() runApp ( "C:/Desktop/R Projects/testShiny" )
где "testShiny" - это название моего проекта студии R.