2017-10-28 35 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头

相关问题