我对Shiny和Shiny仪表板有更多经验,所以也许这就是我遇到这个问题的原因。我可以使用以下假设近似MWE:
说我想要复制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 :(得分: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标题中添加runtime:shiny
答案 1 :(得分:0)
这是一个老问题,但这段代码可以让你在 Flexdashboard 上上传文件:
---
title: "Untitled"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
```
```{r}
dataset <- eventReactive(input$file1,{
dataset <- read.csv(input$file1$datapath)
})
```
# Column {.sidebar}
```{r, echo = FALSE}
fileInput("file1", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv"))
```
# Data
## Row
### Table 1 - Show the data recently acquired
```{r}
renderTable({
dataset <- dataset()
dataset
})
```
主要问题是创建一个响应式函数,因为在上传文件之前您不知道数据集。反应值为 input$file1
我希望问这个问题的人有空,无论如何都是试错。网络上没有文件指向 flexdashboard 用于上传文件。