【问题标题】:R Shiny App- How to get download button working and how to display the number of rows?R Shiny App-如何使下载按钮正常工作以及如何显示行数?
【发布时间】:2021-07-06 10:54:32
【问题描述】:

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

我尝试加入一个下载按钮,但是,每当我按下它时(即使在浏览器中),它都会尝试另存为 .html 而不是 .csv。我也每次都看到“失败的服务器问题”。有没有办法来解决这个问题?我还想确保下载的内容是用户选择的修改后的数据框,而不是原始数据集。

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

任何关于其中任何一个的建议都会非常有帮助!我已经包含了一个包含所有必需文件的文件 bin 链接。谢谢!

https://filebin.net/wjctohctz1sxm16y

【问题讨论】:

    标签: r shiny shinydashboard shinyapps shiny-reactivity


    【解决方案1】:

    标准下载

    这将下载原始数据集。

    不确定要为下载的文件命名什么,因此我已将其硬编码为 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)
                }
            )
    

    【讨论】:

    • 嗨!如何更改它以保存修改后的数据框而不是原始数据集?谢谢!
    • 我正在查看,但与此同时,即使我恢复到您的原始代码,我也会收到关于“关闭”的奇怪错误。
    • 当我打开过滤数据的 csv 文件时,我只看到行名。关于可能导致此/我应该寻找什么的任何想法?非常感谢你的帮助!这意味着很多!
    • 您是否从下拉列表中选择了任何内容?如果你没有它们,你将得不到任何数据。附言我会更新我的答案来解决这个问题并添加一个文件名。
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多