根据闪亮的用户输入更新绘图

时间:2017-11-16 15:29:02

标签: r shiny

我有一个闪亮的应用程序基本上解析用户上传的.txt文件(请参阅this question我询问有关数据输入和解析功能),然后通过调用一些绘图函数生成几个绘图位于shinyServer的{​​{1}}来电之上。

我的server.R脚本中调用的函数是:

server.R

我可以成功获取tabPanel 1中的绘图,以显示parseR()返回的数据帧中的因子级别,但我不知道如何使用它来实际更新绘图。

我的问题是,如何根据用户输入更新地图?

以下是 parseR() # Returns a dataframe (which is the result of parsing the user input entered in `fileInput) ([see here][1] for details) senderPosts() # Returns a plot that is shown in tabPanel 1 wordFreq() # Returns a plot that is shown in tabPanel 2 chatCloud() # Returns a plot that is shown in tabPanel 3

server.R

ui.R

shinyServer(function(input, output, session) {

  data <- reactive({ 
    req(input$file1)

    inFile <- input$file1 

    df <- parseR(file=inFile$datapath) # Call my parser function 

    updateSelectInput(session, inputId = 'sender', label = 'Sender',
                      choices = levels(df$sender), selected = levels(df$sender))

    return(df)
  })

  # Main page
  output$contents <- renderTable({
    head(data(), 25)
  })

  # tabPanel 1
  output$postCount <-renderPlot({
    senderPosts(file=input$file1$datapath)

  })

  # tabPanel 2
  output$wordCount <-renderPlot({
    wordFreq(file=input$file1$datapath)

    })

  # tabPanel 3
  output$chatCloud <-renderPlot({
    chatCloud(file=input$file1$datapath)

  })

})

1 个答案:

答案 0 :(得分:1)

正如我先提到的那样,您不希望将updateInput保留在Reactive功能中。这是因为反应性是懒惰的评价。最好将它们置于观察者(observeobserveEvent)中,这是一个热切评价。

然后,您可以通过input$'inputId'

获取用户输入的值

我还会将绘图计算放在反应函数中,但这不是必需的。

shinyServer(function(input, output, session) {

  data <- reactive({ 
    req(input$file1)

    inFile <- input$file1 

    df <- parseR(file=inFile$datapath) # Call my parser function 

    return(df)
  })
  observe({
     df = data()
     updateSelectInput(session, inputId = 'sender', label = 'Sender',
                      choices = levels(df$sender), selected = levels(df$sender))
  })
  # Main page
  output$contents <- renderTable({
    head(data(), 25)
  })

  # tabPanel 1
  output$postCount <-renderPlot({
    senderPosts(file=input$file1$datapath,newParamter = input$sender)

  })

  # tabPanel 2
  output$wordCount <-renderPlot({
    wordFreq(file=input$file1$datapath)

    })

  # tabPanel 3
  output$chatCloud <-renderPlot({
    chatCloud(file=input$file1$datapath)

  })

})