rPivotTable在闪亮文档中:CSV下载失败

rPivotTable在闪亮文档中:CSV下载失败,r,shiny,download,flexdashboard,rpivottable,R,Shiny,Download,Flexdashboard,Rpivottable,这是我有史以来第一个堆栈溢出问题,所以如果你认为我做得不好,请告诉我 我正在使用flexdashboard和Shining模块创建一个交互式文档,我希望包括一个rPivotTable和一个下载按钮,该按钮将pivot表作为csv下载。此csv应包含用户更改rPivotTable输入时创建的数据表 我已经使用了其他堆栈溢出的答案(比如这里:)来编写代码,我觉得我已经接近了。但是,当我运行下面的代码时,在我的Chrome浏览器中打开交互式文档,然后单击下载按钮,就会发生错误。Chrome上页面底部弹

这是我有史以来第一个堆栈溢出问题,所以如果你认为我做得不好,请告诉我

我正在使用flexdashboard和Shining模块创建一个交互式文档,我希望包括一个rPivotTable和一个下载按钮,该按钮将pivot表作为csv下载。此csv应包含用户更改rPivotTable输入时创建的数据表

我已经使用了其他堆栈溢出的答案(比如这里:)来编写代码,我觉得我已经接近了。但是,当我运行下面的代码时,在我的Chrome浏览器中打开交互式文档,然后单击下载按钮,就会发生错误。Chrome上页面底部弹出的小下载栏没有显示csv文件,而是显示消息“失败-服务器问题”。为了查看是否生成了
aSummaryTable
,我在UI中包含了输出(
DT::dataTableOutput(ns(“aSummaryTable”))
),但是当我运行Rmd时,生成的文档只显示rPivotTable和下载按钮

我对Shining很陌生,从未使用过java脚本,因此我不太理解代码的
onRefresh
部分:

onRefresh = htmlwidgets::JS("function(config) { 
                   Shiny.onInputChange('myData', document.getElementById('pivot').innerHTML); 
                   }")
这是我完整的(希望是可复制的)Rmarkdown代码。(如果您知道我为什么会犯这个错误,以及我如何解决这个问题,我将不胜感激)

---
标题:“报告”
输出:
flexdashboard::flex_仪表板:
主题:单纯形
方向:行
社交:菜单
源代码:嵌入
运行时间:闪亮
---
```{r设置,include=FALSE}
##安装软件包(如果尚未安装)需要(软件包)

usePackage不确定这是如何工作的,但我自己已经设法回答了这个问题,因此我在上面的问题的编辑中添加了解决方案。如果您愿意,您可以回答自己的问题。你的答案是什么?我不知道这是怎么回事,但我自己已经设法回答了这个问题,所以我在上面的问题的编辑中添加了解决方案。如果你愿意,你可以回答你自己的问题。这是你的答案
---
title: "Report"
output: 
  flexdashboard::flex_dashboard:
    theme: simplex
    orientation: rows
social: menu
source_code: embed
runtime: shiny
---

```{r setup, include=FALSE}

## Installing packages if not already installed & require(package)
usePackage <- function(p) {
  if (!is.element(p, installed.packages()[,1]))
    install.packages(p, dep = TRUE)
  require(p, character.only = TRUE)
}

usePackage('flexdashboard')
usePackage('plotly')
usePackage('data.table')
usePackage('rpivotTable')
usePackage('knitr')
usePackage('Rcpp')
usePackage('stringi')
usePackage('tidyr')
usePackage('chron')
usePackage('DT')
usePackage('caroline')
usePackage('rvest')
usePackage('htmlwidgets')

```


Demo
=========================

### Demo

```{r, include=FALSE}

# UI function
demoUI <- function(id) {
  ns <- NS(id)
  fillCol(height = 600, flex = c(NA, 1),

        DT::dataTableOutput(ns("aSummaryTable")),
        rpivotTableOutput(ns("pivot"))

       ,
       inputPanel(
         downloadButton(ns('downloadData'), 'Download ')
       )
  )
}

# Server function
demoServer <- function(input, output, session) {

  output$pivot <- renderRpivotTable({
   library(htmlwidgets)
   library(rpivotTable)
   rpivotTable(data = datasets::mtcars, aggregatorName = "Count", rendererName = "Bar Chart",
                onRefresh = htmlwidgets::JS("function(config) { 
                           Shiny.onInputChange('myData', document.getElementById('pivot').innerHTML); 
                           }"))

   })

  # Clean the html and store as reactive
  summarydf <- eventReactive(input$myData,{
    library(htmlwidgets)
    input$myData %>% 
       read_html %>% 
       html_table(fill = TRUE) %>% 
        .[[2]]

  })

  # show df as DT::datatable
  output$aSummaryTable <- DT::renderDataTable({
      DT::datatable(summarydf(), rownames = FALSE)
  })


  output$downloadData <- downloadHandler(
    filename <- "rpivottable_mtcars.csv",
    # This function should write data to a file given to it by
    # the argument 'file'.
    content = function(file) {
      # Write to a file specified by the 'file' argument
      write.csv(summarydf(), file,
        row.names = FALSE)
    }
  )

}
```

```{r}
demoUI("demo")
callModule(demoServer, "demo")
```
---
title: "Report"
output: 
  flexdashboard::flex_dashboard:
    theme: simplex
    orientation: rows
social: menu
source_code: embed
runtime: shiny
---

```{r setup, include=FALSE}

## Installing packages if not already installed & require(package)
usePackage <- function(p) {
  if (!is.element(p, installed.packages()[,1]))
    install.packages(p, dep = TRUE)
  require(p, character.only = TRUE)
}

usePackage('flexdashboard')
usePackage('plotly')
usePackage('data.table')
usePackage('rpivotTable')
usePackage('knitr')
usePackage('Rcpp')
usePackage('stringi')
usePackage('tidyr')
usePackage('chron')
usePackage('DT')
usePackage('caroline')
usePackage('rvest')
usePackage('htmlwidgets')

```


Demo
=========================

### Demo

```{r}
shinyApp(
  ui = fillPage(
    fillCol(flex = c(NA, 1), 
        DT::dataTableOutput("aSummaryTable"),
        rpivotTableOutput("pivotTab")
       ,
       inputPanel(
         downloadButton('downloadData', 'Download ')
    )
  )),


  server = function(input, output, session) {

  output$pivotTab <- renderRpivotTable({
    rpivotTable(data = datasets::mtcars, aggregatorName = "Count", rendererName = "Table",
                onRefresh = htmlwidgets::JS("function(config) {Shiny.onInputChange('myData', document.getElementById('pivotTab').innerHTML);}")
    )
  })

  # Clean the html and store as reactive
  summarydf <- eventReactive(input$myData,{
    input$myData %>% 
       read_html %>% 
       html_table(fill = TRUE) %>% 
        .[[2]]

  })

    # show df as DT::datatable
  output$aSummaryTable <- DT::renderDataTable({
      DT::datatable(summarydf(), rownames = FALSE)
  })


  output$downloadData <- downloadHandler(
    filename <- "rpivottable_mtcars.csv",
    content = function(file) {
      write.csv(summarydf(), file,
                row.names = FALSE)
    }
  )

}

)
```