R Flexdashboard:通过来自其他组件的fileInput调用上传的数据
问题描述:
我对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组件调用用户上传数据的最佳方式是什么?
答
做到这一点的一种方法是使用侧边栏(尽管没有相同的代码可以使用)。修改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头