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")
})