【问题标题】:"Output" of observeEvent() in R ShinyR Shiny中observeEvent()的“输出”
【发布时间】:2022-01-19 11:04:30
【问题描述】:

谁能给我一个建议,请问我该怎么办?我试图“根据用户选择更改可变数据类型”。看起来一切正常,但我不知道如何将修改后的数据集用于未来的工作。我在那里粘贴我的服务器的代码。

现在,当我更改变量类型时,我想使用修改后的 df1。我收到“消息(“它正在工作”);“如果我使用 char 变量并将其更改为因子。例如,如果我选择 char 变量并尝试将其转换为数字,我会收到警告“观察()中的警告:强制引入的 NA”,这意味着该代码有效(在我看来)。但是,如果我想使用修改后的 df1(),我必须做什么。如何“保存”这种变化?

编辑的服务器

 df1 <- reactive({
      req(input$file1)
      df <- read.csv(input$file1$datapath,
                     header = input$header,
                    sep = input$sep,
                     quote = input$quote)
     df
     
   })
   
   
   colnames <- reactive({ names(df1()) })
   
   observeEvent(df1(), {
     
     updateCheckboxGroupInput(session, "class_var",
                              label = "Select Columns",
                              choices = colnames(),
                              selected = "") 
     
   })
   
   ## update when selection changes
   
   # storing the selected variable from the variables list table 
   table.sel <- reactive({
     df1()[,which(colnames(df1()) == col.name()[input$class_var,1])]
   })
   
   modified_df1 = eventReactive(input$chg_class,{
     if( input$choose_class == "Numeric"){
       df1 <- as.numeric(df1()[, input$class_var])
     } else if(input$choose_class == "Factor"){ message("it's working");
       df1 <- as.factor(df1()[, input$class_var])
     } else if( input$choose_class == "Character"){
       df1 <- as.character(df1()[, input$class_var])
     } else if( input$choose_class == "Date"){
       df1 <- as.Date(df1()[, input$class_var])
     }
   })

现在,当我更改变量类型时,我想使用修改后的 df1。我收到“消息(“它正在工作”);“如果我使用 char 变量并将其更改为因子。例如,如果我选择 char 变量并尝试将其转换为数字,我会收到警告“观察()中的警告:强制引入的 NA”,这意味着该代码有效(在我看来)。但是,如果我想使用修改后的 df1(),我必须做什么。如何“保存”这种变化?

【问题讨论】:

    标签: shiny shinydashboard shiny-server shiny-reactivity


    【解决方案1】:

    你几乎得到了正确的答案。如果您查看 Shiny reference documentation 中的 observeEvent() 条目,您会看到同一页面上还有另一个功能:eventReactive()。它们的工作方式几乎相同,但eventReactive() 返回一个反应对象。所以,要让你的代码按照你想要的方式工作,你需要做的就是改变你的

    observeEvent(input$chg_class, {
      ...
    })
    

    modified_df1 <- eventReactive(input$chg_class, {
      ...
    })
    

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 2021-06-06
      • 2018-12-05
      • 2018-12-14
      • 2019-08-01
      • 2021-11-14
      • 2021-12-21
      • 2017-02-23
      • 2018-11-18
      相关资源
      最近更新 更多