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



我正在尝试创建一个闪亮的应用程序,允许用户上传自己的数据作为csv,执行一些基本计算,然后将原始+计算数据导出为csv。我能够得到在应用程序内的表中显示的计算,但我不能得到正确下载的数据。当我尝试下载原始数据+计算数据时,它只是下载原始数据。下面是我为ui和服务器编写的代码。如有任何帮助,不胜感激。

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)

试试这个

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)

}
)

}

相关内容

  • 没有找到相关文章

最新更新