R Shiny CSV上传结合数值输入计算时mutate运算报错如何解决?
问题原因
- 你在
mutate()中直接写的C会被dplyr优先识别为上传数据集中的列,而非你前端输入的input$C数值,找不到对应列就会触发非数值参数报错 - 当前
eventReactive仅监听文件上传事件,后续修改输入数值不会触发结果更新,不符合实时计算的需求 - 存在CSV读取时A列被识别为字符型的可能,也会导致相加运算报错
修正后完整代码
library(shiny) library(dplyr) ui <- fluidPage( titlePanel("Test"), mainPanel( fileInput( inputId = "csvFile", label = "Upload csv file", accept = c(".csv")), uiOutput("C"), uiOutput("D"), tableOutput("modifiedData") ) ) server <- function(input, output) { output$C <- renderUI({ numericInput("C", "Variable C", 0) }) output$D <- renderUI({ numericInput("D", "Variable D", 0) }) # 调整监听事件,文件上传、修改C/D输入值都会触发重新计算 userData <- eventReactive(c(input$csvFile, input$C, input$D), { req(input$csvFile, input$C) raw_df <- read.csv(input$csvFile$datapath) calc_df <- raw_df %>% # 先把A列转成数值型,避免CSV读取时类型异常 mutate(A = as.numeric(A), # .data$标识从数据集取列,.env$标识取环境中的Shiny输入值,避免dplyr掩码歧义 sum = .data$A + .env$input$C) return(calc_df) }) output$modifiedData <- renderTable({ userData() }) } shinyApp(ui = ui, server = server)
如果需要同时把D数值加入计算,直接在mutate里新增对应逻辑即可,比如新增sum_d = .data$A + .env$input$D就能同步输出和D相加的结果。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

