R Flexdashboard:通过其他组件

时间:2017-10-28 15:11:25

标签: r file-upload shiny flexdashboard

我对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组件调用用户上传数据的最佳方法是什么?

2 个答案:

答案 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 用于上传文件。