R Shiny App-如何使下载按钮正常工作以及如何显示行数?

R Shiny App- How to get download button working and how to display the number of rows?

你好,我正在使用 Shiny 做一个项目。我对 Shiny 非常陌生,所以我什至能做到这一点让我感到非常惊讶。我目前有一些看起来像屏幕截图的东西。它允许您按年份、大洲和国家/地区修改原始数据框,并在更改时显示数据框的统计信息。

我尝试合并一个下载按钮,但是,每当我按下它(甚至在浏览器中)时,它都会尝试另存为 .html 而不是 .csv。我也每次都看到“Failed- server problem”。有没有办法来解决这个问题?我还想确保下载的是用户选择的修改后的数据框,而不是原始数据集。

此外,我尝试添加显示行数的文本(类似于列数)。对原始数据集执行此操作非常容易,但我不确定如何执行 it/display 当数据框被用户视图限制的年份、国家或大陆操作时的结果。

对其中​​任何一个的任何建议都将非常有帮助!我已经包含了一个文件 bin link belwo,其中包含所有必要的文件。谢谢!

https://filebin.net/wjctohctz1sxm16y

标准下载

这将下载原始数据集。

不确定要为下载的文件命名,所以我已将其硬编码为 test.csv。

        output$downloadData <- downloadHandler(
            filename = function() {
                paste("test.csv", sep = "")
            },
            content = function(con) {
                write.csv(data, con, row.names = TRUE)
            }
        )

过滤下载

这将根据所选的年份、国家和大陆对数据进行子集化并下载。 文件名将由破折号分隔的选择组成,除非没有进行任何选择,否则文件名将为 'AllData.csv'.

        output$downloadData <- downloadHandler(
            filename = function() {
            selected <-c()
            if (input$year != "All") {
                    selected <-c(selected, input$year)
                }
                if (input$country != "All") {
                    selected <-c(selected, input$country)
                }
                if (input$continent != "All") {
                    selected <-c(selected, input$continent)
                }
                  if (length(selected) == 0) {
                selected <- c("AllData")
            }
            
                  paste0(paste(selected, collapse="-"), ".csv")
            },
            content = function(con) {
            if (input$year != "All") {
                    data <- df[df$Year == input$year,]
                }
                if (input$country != "All") {
                    data <- df[df$Country == input$country,]
                }
                if (input$continent != "All") {
                    data <- df[df$Continent == input$continent,]
                }
                write.csv(data, con, row.names = TRUE)
            }
        )