R 更新闪亮的标签

R 更新闪亮的标签,r,shiny,R,Shiny,我正在尝试构建一个有几个标签的闪亮应用程序。其中一个选项卡用于用户选择基础数据集,我希望这些数据在另一个选项卡中以漂亮的图形显示。(我将底层数据保存在最大大小的文件中,用户可以一次一个地进行调查,因为我担心,否则闪亮的应用程序可能会变得非常缓慢,甚至崩溃)。然而,我正在努力更新包含基础数据的变量,如下面简化的可复制示例所示: library(shiny) library(shinyWidgets) library(dplyr) library(ggplot2) dataFrameA <-

我正在尝试构建一个有几个标签的闪亮应用程序。其中一个选项卡用于用户选择基础数据集,我希望这些数据在另一个选项卡中以漂亮的图形显示。(我将底层数据保存在最大大小的文件中,用户可以一次一个地进行调查,因为我担心,否则闪亮的应用程序可能会变得非常缓慢,甚至崩溃)。然而,我正在努力更新包含基础数据的变量,如下面简化的可复制示例所示:

library(shiny)
library(shinyWidgets)
library(dplyr)
library(ggplot2)

dataFrameA <- data.frame(
  company = c("A", "B", "C", "D"), 
  revenue = runif(4, min = 0, max = 1000000)
)

dataFrameB <- data.frame(
  company = c("E", "F", "G", "H"), 
  revenue = runif(4, min = 0, max = 1000000)
)

usedDataFrame <- dataFrameA

ui <- fluidPage(
  verticalTabsetPanel(
    verticalTabPanel(
      title = "graph", icon = icon("chart-bar", "fa-1x", lib = "font-awesome"),
      box_height = "120px", 
      plotOutput(outputId = "barChart")
    ), 
    verticalTabPanel(
      title = "data", icon = icon("database", "fa-1x", lib = "font-awesome"),
      box_height = "120px", 
      selectInput(inputId = "selectData", label = "choose dataset", 
                  choices = c("ABCD", "EFGH"))
    )
  )
)

server <- function(input, output){

  output$barChart <- renderPlot({
    ggplot(data = usedDataFrame, aes(x = company, y = revenue)) +
      geom_bar(width = 1, stat = "identity")
  })

  observeEvent(input$selectData, {
    if (input$selectData == "ABCD"){
      usedDataFrame <- dataFrameA
    }else{
      usedDataFrame <- dataFrameB
    }
  })

}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)
图书馆(dplyr)
图书馆(GG2)

dataFrameA您非常接近您的方法,但是比处理全局变量更简单的方法可以使用
reactive
来完成,它将根据您的
输入自动更新

library(shiny)
library(shinyWidgets)
library(dplyr)
library(ggplot2)

dataFrameA <- data.frame(
  company = c("A", "B", "C", "D"), 
  revenue = runif(4, min = 0, max = 1000000)
)

dataFrameB <- data.frame(
  company = c("E", "F", "G", "H"), 
  revenue = runif(4, min = 0, max = 1000000)
)

ui <- fluidPage(
  verticalTabsetPanel(
    verticalTabPanel(
      title = "graph", icon = icon("chart-bar", "fa-1x", lib = "font-awesome"),
      box_height = "120px", 
      plotOutput(outputId = "barChart")
    ), 
    verticalTabPanel(
      title = "data", icon = icon("database", "fa-1x", lib = "font-awesome"),
      box_height = "120px", 
      selectInput(inputId = "selectData", label = "choose dataset", 
                  choices = c("ABCD", "EFGH"))
    )
  )
)

server <- function(input, output){

  dat <- reactive({
    if (input$selectData == "ABCD") {
      return(dataFrameA)
    }
    else if (input$selectData == "EFGH") {
      return(dataFrameB)
    }
  })

  output$barChart <- renderPlot({
    ggplot(data = dat(), aes(x = company, y = revenue)) +
      geom_bar(width = 1, stat = "identity")
  })

}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)
图书馆(dplyr)
图书馆(GG2)

dataFrameA您非常接近您的方法,但是比处理全局变量更简单的方法可以使用
reactive
来完成,它将根据您的
输入自动更新

library(shiny)
library(shinyWidgets)
library(dplyr)
library(ggplot2)

dataFrameA <- data.frame(
  company = c("A", "B", "C", "D"), 
  revenue = runif(4, min = 0, max = 1000000)
)

dataFrameB <- data.frame(
  company = c("E", "F", "G", "H"), 
  revenue = runif(4, min = 0, max = 1000000)
)

ui <- fluidPage(
  verticalTabsetPanel(
    verticalTabPanel(
      title = "graph", icon = icon("chart-bar", "fa-1x", lib = "font-awesome"),
      box_height = "120px", 
      plotOutput(outputId = "barChart")
    ), 
    verticalTabPanel(
      title = "data", icon = icon("database", "fa-1x", lib = "font-awesome"),
      box_height = "120px", 
      selectInput(inputId = "selectData", label = "choose dataset", 
                  choices = c("ABCD", "EFGH"))
    )
  )
)

server <- function(input, output){

  dat <- reactive({
    if (input$selectData == "ABCD") {
      return(dataFrameA)
    }
    else if (input$selectData == "EFGH") {
      return(dataFrameB)
    }
  })

  output$barChart <- renderPlot({
    ggplot(data = dat(), aes(x = company, y = revenue)) +
      geom_bar(width = 1, stat = "identity")
  })

}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)
图书馆(dplyr)
图书馆(GG2)

dataFrameA输出$barChart
是一个反应性端点。修改代码的最简单方法是让它直接使用反应式源代码
input$selectData
。无论何时输入发生更改,都会通知您的输出需要重新执行

看起来是这样的:

output$barChart <- renderPlot({

    if (input$selectData == "ABCD"){
      usedDataFrame <- dataFrameA
    }else{
      usedDataFrame <- dataFrameB
    }

    ggplot(data = usedDataFrame, aes(x = company, y = revenue)) +
      geom_bar(width = 1, stat = "identity")
})

输出$barChart
是一个被动端点。修改代码的最简单方法是让它直接使用反应式源代码
input$selectData
。无论何时输入发生更改,都会通知您的输出需要重新执行

看起来是这样的:

output$barChart <- renderPlot({

    if (input$selectData == "ABCD"){
      usedDataFrame <- dataFrameA
    }else{
      usedDataFrame <- dataFrameB
    }

    ggplot(data = usedDataFrame, aes(x = company, y = revenue)) +
      geom_bar(width = 1, stat = "identity")
})