R Shiny - 使用 csv 中的数据和用户 numericInput 进行计算

Posted

技术标签:

【中文标题】R Shiny - 使用 csv 中的数据和用户 numericInput 进行计算【英文标题】:R Shiny - calculation using data in csv and user numericInput 【发布时间】:2021-10-29 14:30:50 【问题描述】:

我正在尝试创建一个闪亮的应用程序,用户可以在其中上传 csv 文件,输入数值,将数值添加到 csv 中的特定数据列,然后将原始 + 计算数据保存在表格中。我使用一个简单的 csv 文件在下面生成了一个简化的 Shiny 脚本。

当我尝试运行应用程序时,我收到错误:

mutate() 输入 sum 存在问题。 [31mx[39m 二元运算符的非数字参数 [34mi[39m 输入sumA + C

我尝试查找一些如何解决此问题的示例,但无法找到利用 eventReactive() 来使用新计算的数据更新数据表的内容。非常感谢任何帮助。

图书馆(闪亮) 库(dplyr)

ui

# Application title
titlePanel("Test"),

# Show a plot of the generated distribution
    mainPanel(
      
        fileInput(
            inputId = "csvFile",
            label = "Upload csv file",
            accept = c(".csv")),
        
        uiOutput("C"),
        uiOutput("D"),
        
        tableOutput("modifiedData")
    
    )
)

服务器

output$C <- renderUI(
    numericInput("C", "Variable C", 0)
    )
output$D <- renderUI(
    numericInput("D", "Variable D", 0)
)

userData <- eventReactive(input$csvFile,
                          
                              
                              req(input$csvFile)
                              
                              raw_df <- read.csv(input$csvFile$datapath)
                              calc_df <- raw_df %>%
                              
                              mutate(sum = A + C)
                              
                          ) 

output$modifiedData <- renderTable(userData())

shinyApp(ui = ui, server = server)

【问题讨论】:

您的意思是要将作为单个数值的C 添加到A 列的所有6 行吗?在这种情况下,您需要mutate(sum = A + input$C) 【参考方案1】:

您应该使用反应变量input$C。此外,您应该使eventReactive 依赖于input$C。试试这个

ui <- fluidPage(
  
  # Application title
  titlePanel("Test"),
  
  # Show a plot of the generated distribution
  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)
  )
  
  userData <- eventReactive(list(input$csvFile, input$C),
                            
                              
                              req(input$csvFile)
                              
                              raw_df <- read.csv(input$csvFile$datapath)
                              calc_df <- raw_df %>%
                                
                                mutate(sum = A + input$C)
                              
                            ) 
  
  output$modifiedData <- renderTable(userData())


shinyApp(ui = ui, server = server)

【讨论】:

以上是关于R Shiny - 使用 csv 中的数据和用户 numericInput 进行计算的主要内容,如果未能解决你的问题,请参考以下文章

Shiny App - 从上传的 CSV 生成和下载 PPTX 幻灯片

在R Shiny中如何分离滑块输入值并使用它们进行过滤

R Shiny Dynamic选择输入 - 捕获事件

在 R/Shiny 中获取本地文件数据

使用Javascript使用shinyjs将数据表导出为Shiny中的CSV

如何在Shiny R中丢弃DT :: datatable上的用户编辑