首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R Shiny -上传csv,计算表中的值,然后将结果下载为新的csv

R Shiny -上传csv,计算表中的值,然后将结果下载为新的csv
EN

Stack Overflow用户
提问于 2021-08-29 19:30:11
回答 1查看 37关注 0票数 0

我正在尝试创建一个闪亮的应用程序,允许用户将自己的数据作为csv上传,执行一些基本计算,然后将原始+计算数据导出为csv。我可以将计算结果显示在应用程序中的表格中,但无法正确下载数据。当我尝试下载原始+计算数据时,它只下载原始数据。下面是我为ui和服务器编写的代码。任何帮助都是非常感谢的。

代码语言:javascript
复制
library(shiny)
library(dplyr)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Whole-rock anhydrous conversion"),

    # Upload csv file 
    sidebarLayout(
        sidebarPanel(
            fileInput(
                inputId = "csvFile",
                label = "Upload csv file",
                accept = c(".csv")
            ),
            
            downloadButton("download", "Download anhydrous data")
            
        ),

        mainPanel(
            
            tableOutput("modifiedData")
        )
    )
)

# Define server logic to calculate anhydrous concentrations
server <- function(input, output) {
    
    rawData <- eventReactive(input$csvFile, {read.csv(input$csvFile$datapath)})
    
    output$modifiedData <- renderTable({rawData() %>%
    
            
            # Calculate anhydrous concentrations
            
            mutate(LOI_Factor = Total/(Total-LOI)) %>%
            
            mutate(Anhydrous = "") %>%
            mutate(SiO2_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(TiO2_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(Al2O3_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(Fe2O3_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(MnO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(MgO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(CaO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(Na2O_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(K2O_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(Cr2O3_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(P2O5_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(SrO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
            mutate(BaO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO)))
        
        })
    
    output$download <- downloadHandler(
      
        filename = function() {paste("Anhydrous_data.csv",  Sys.Date(), ".csv", sep = "")},
        content = function(file){
            write.csv(rawData(), file, row.names = FALSE)
            
        }
        
    )
    
}

# Run the application 
shinyApp(ui = ui, server = server)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-29 19:41:59

尝尝这个

代码语言:javascript
复制
server <- function(input, output) {
  
  rawData <- eventReactive(input$csvFile, {
    req(input$csvFile)
    df <- read.csv(input$csvFile$datapath)
    mydf <- df %>% 
      # Calculate anhydrous concentrations
      
      mutate(LOI_Factor = Total/(Total-LOI)) %>%
      
      mutate(Anhydrous = "") %>%
      mutate(SiO2_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(TiO2_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(Al2O3_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(Fe2O3_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(MnO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(MgO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(CaO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(Na2O_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(K2O_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(Cr2O3_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(P2O5_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(SrO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO))) %>%
      mutate(BaO_anh = SiO2 * (100/ (SiO2 + TiO2 + Al2O3 + Fe2O3 + MnO + MgO + CaO + Na2O + K2O + Cr2O3 + P2O5 + SrO + BaO)))
    mydf
  })
  
  output$modifiedData <- renderTable({rawData() })
  
  output$download <- downloadHandler(
    
    filename = function() {paste("Anhydrous_data.csv",  Sys.Date(), ".csv", sep = "")},
    content = function(file){
      write.csv(rawData(), file, row.names = FALSE)
      
    }
  )
  
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68976268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档