簡體   English   中英

在一個閃亮的應用程序中,您如何明確引用來自 selectizeInput 的用戶選擇以讀取特定的 csv 文件?

[英]In a shiny app, how do you explicitly refer to user selections from selectizeInput to read in specific csv files?

我正在使用 selectizeInput 創建一個帶有多個下拉菜單的 Shiny 應用程序。 一個叫做“國家”,有一個國家列表,另一個叫做“年”,有一個年份列表。 然后,該應用程序將根據該國家/地區組合的數據填充一些圖表。 我在每個國家和每年的文件夾中都有一個 csv 文件,並將所有這些文件放在一起會創建一個非常慢的應用程序,所以我想有條件地將特定國家/年份文件讀入服務器基於那些選擇。

Country 輸入允許多項選擇(最多 5 個),Year 輸入只允許一項。

所有 CSV 文件的格式如下:

2014_UK.csv
2014_US.csv
2014_SA.csv
2015_UK.csv
2015_US.csv
....

做這個的最好方式是什么?

一種方法是創建一個reactive ,每次更改一個輸入時都會讀入數據。

# create some fake data
countries <- c('US', 'UK', 'SA')
years <- 2013:2015
x <- paste0(paste(rep(years, each = length(countries)), countries, sep = "_"), '.csv')
for (i in x){
  write.csv(data.frame(x=i, y=rnorm(5)), i)
}

library(shiny)
ui <- fluidPage(
  selectInput('year', 'year', years),
  selectInput('country', 'country', countries, multiple=T),  # multiple is T
  dataTableOutput('tbl', width='200px')
)
server <- function(input, output){
  r <- reactive({
    req(input$country)  # req country to be not NULL
    x <- paste0(input$year, '_', input$country, '.csv')  # paste inputs together, maybe more than 1
    l <- lapply(x, read.csv)  # read in all csvs in x
    do.call('rbind', l)  # bind them together
  })
  output$tbl <- renderDataTable(r())
}
shinyApp(ui, server)

在此應用程序中,每次更改其中一個輸入時,都會執行反應塊,並且output$tbl將呈現新數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM