我正在尝试创建一个闪亮的应用程序,允许用户上传自己的数据作为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)
}
)
}