"Output" R Shiny 中的 observeEvent()

"Output" of observeEvent() in R Shiny

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

现在,当我更改变量类型时,我想使用修改后的 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 reference documentation 中查看 observeEvent() 的条目,您会发现同一页面上还有另一个函数:eventReactive()。它们的工作方式几乎相同,但 eventReactive() returns 是一个反应对象。因此,要让您的代码按照您希望的方式工作,您需要做的就是更改您的

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

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