2017-10-28 36 views
1

我對Shiny和Shiny儀表板有更多的經驗,所以也許這就是爲什麼我遇到問題。我可以用下面的假設來近似MWE:R Flexdashboard:通過來自其他組件的fileInput調用上傳的數據

假設我想複製ggplotly example,但我想將它與file upload功能與Shiny結合使用。這意味着,我將有九個FlexDashboard組件(一個用於數據上傳,4 + 4用於ggplotly數據)。如果我在組件#1中設置了文件上傳,我似乎可以稱其爲被動地(來自上面的文件上傳示例)

server <- function(input, output) { 

output$contents <- renderTable({ 

req(input$file1) 

df <- read.csv(input$file1$datapath, 
     header = input$header, 
     sep = input$sep, 
     quote = input$quote) 

return(head(df)) 

}) 

} 

這在它自己的組件/代碼塊內RMarkdown中工作;一旦用戶上傳.csv文件,它將顯示前五行。

但是,我無法從任何其他組件中調用上傳的數據,因爲它作爲Shiny模塊嵌入到它自己的組件中。我試着將上傳的數據分配給一個對象,然後被動地調用它(例如selectedData()),但是將組件灰化。也嘗試設置observeEvent無濟於事。我覺得我必須失去一些明顯的東西。在ggplotly示例中,數據保存在全局塊中 - 這將滿足我的需求,但似乎只適用於從包/庫中獲取數據。

tl; dr從其他flexdashboard組件調用用戶上傳數據的最佳方式是什麼?

回答

0

做到這一點的一種方法是使用側邊欄(儘管沒有相同的代碼可以使用)。修改fileInput以反映文件選項。

試試這個:

# File Upload {.sidebar} 

```{r, echo = FALSE} 
fileInput("file1", "Choose CSV File", 
       multiple = TRUE, 
       accept = c("text/csv", 
         "text/comma-separated-values,text/plain", 
         ".csv")) 
``` 

記住運行時添加:閃亮的YAML頭

相關問題