获取UI输入参数以在闪亮的应用程序中创建全局对象

时间:2015-12-22 08:35:53

标签: r shiny

我正在尝试设置一个闪亮的应用程序,我想给用户三个步骤来播放数据。我在这里构建了一个例子。使用用户输入(数据长度)在第一步生成数据。在第二步中,用户决定他想用什么参数来乘以数据。在第三个中,他获得了他输入的行数的向量的总和。这个例子与我的场景类似。在我的实际场景中,第一步是从服务器提取数据以供参数用户决定&这需要很多时间。我不想在后面的步骤中重复这一步骤。我只想弄清楚一种方法只能使这种情况发生一次,后面的步骤使用第一步中生成的data

ui.R

library(shiny)

shinyUI(
  fluidPage(

    titlePanel("Reactivity & Global Variable"),

    sidebarLayout(
      sidebarPanel(
        textInput("box1", "Observations", "100"),
        actionButton("go1", "Go"),
        br(),
        textInput("box2", "Multiplication Factor", "2"),
        actionButton("go2", "Go"),
        br(),
        textInput("box3", "Rows to Add", "50"),
        actionButton("go3", "Go"),
        br()
      ),

      mainPanel(
        h3(textOutput("obox1", container = span)),
        h3(textOutput("obox2", container = span)),
        h3(textOutput("obox3", container = span))
      )
    )
  )
)

server.R

shinyServer(function(input, output) {

  a1st<-eventReactive(input$go1, {
    input$box1
  })

  output$obox1 <- renderText({
    data<-seq(1:as.numeric(a1st())
  })

  a2st<-eventReactive(input$go2, {
    input$box2
  })


  output$obox2 <- renderText({
    data<-seq(1:as.numeric(a1st()))
    data*as.numeric(a2st())
  })

  a3st<-eventReactive(input$go3, {
    input$box3
  })

  output$obox3 <- renderText({
    data<-seq(1:as.numeric(a1st()))
    data<-data*as.numeric(a2st())
    sum(data[1:as.numeric(a3st())])
  })
})

1 个答案:

答案 0 :(得分:0)

尝试

shinyServer(function(input, output) {
a1st<-eventReactive(input$go1, { seq(1:as.numeric(input$box1)) }) 
output$obox1 <- renderText({ a1st() }) 

a2st<-eventReactive(input$go2, { input$box2 })

output$obox2 <- renderText({ data<-a1st() data*as.numeric(a2st()) }) 

a3st<-eventReactive(input$go3, { input$box3 }) 
output$obox3 <- renderText({ data<-a1st() data<-data*as.numeric(a2st()) sum(data[1:as.numeric(a3st())]) })
 })

要检查仅生成一次的数据,您可以添加print

a1st<-eventReactive(input$go1, { print("generate") seq(1:as.numeric(input$box1)) })

“生成”仅在您点击go1

时打印

如果您不想在会话之间保存数据,则不需要使用全局环境(您可以使用reactiveValuesreactiveEvent仅在go1时更改