我正在尝试创建一个闪亮的应用程序,允许用户将自己的数据作为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)发布于 2021-08-29 19:41:59
尝尝这个
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)
}
)
}https://stackoverflow.com/questions/68976268
复制相似问题