如何使用一个React变量将df子集化到r中?然后重新塑造新的 Dataframe 并将其放置到renderDT中?

dtcbnfnu  于 2023-02-01  发布在  React
关注(0)|答案(1)|浏览(88)

我正在做一个闪亮的 Jmeter 板,我有一个数据框,我创建了一个年份列,地区列,和几种疫苗的列。我希望用户能够从下拉列表中选择一种疫苗。使用输入的代码,然后将创建一个子集的数据框显示。我首先需要重塑它之前,我显示它虽然。
-----这是UI部分

fluidRow(
                                            selectInput(inputId = "Immunization", label = "Select group", c("FLU","HEPA","HEPB")),
                                            DTOutput('AdultTable'))
                                        
                                          
                                 ),

-----这是我目前在服务器部分的代码。当我试图运行它时,它告诉我:
警告:.getReactiveEnvironment()$当前上下文中出错:没有活动的React上下文,不允许操作。·您试图做一些只能从React使用者内部完成的事情。65:.getReactiveEnvironment()$当前上下文()中出错:没有活动的React上下文,不允许操作。·您尝试执行只能从React使用者内部执行的操作。

vaccine_sel = reactive(input$Immunization)
                         
 requested_table = (requested_table = subset(Imm, select = c("REPORT_YEAR", "DISTRICT_ID", req(vaccine_sel()))))
  

  requested_table = reshape(requested_table, idvar = "DISTRICT_ID", timevar = "REPORT_YEAR", direction = "wide")
  
  
  
  
  output$AdultTable = renderDT(
  

    requested_table, options = list(lengthChange = FALSE, searching = FALSE, pageLength = 15, paging = FALSE, scrollX = TRUE) 
    
  )

-----如果我试着把它放到reactive()环境中,它仍然会给我一个错误:
警告:React性错误:...必须为空。有问题的参数:·请求的 * 表格=子集(Imm,选择= c(“报告类型”,“地区 _ID”,请求(疫苗_选择()))55:React性错误(请求表=子集(Imm,选择= c(“报告年份”...必须为空。有问题的参数:·请求表=子集(Imm,选择= c(“报告类型”,“地区ID*",请求(疫苗选择()))))
----如果我硬编码“流感”到它里面,那么它就工作得很好。

requested_table = requested_table = subset(Imm, select = c("REPORT_YEAR", "DISTRICT_ID", "FLU"))

----它会给予我我想要的3列,然后我可以从那里重塑。

This is a clip of what the data looks like before the user chooses the disease

This is what it would hopefully look like if it works

sd2nnvve

sd2nnvve1#

You tried to do something that can only be done from inside a reactive consumer.
...是一个礼貌的提示(好:错误),您尝试使用无功元件(在您的情况下:input$Immunization),而不是像observe这样的被动 * 消费者 *--没有它,Shiny就不会监听该组件的更改。

library(shiny)
library(dplyr)
library(DT)

df <- data.frame(vaccine = gl(2, 4, labels = LETTERS[1:2]),
                 value = rnorm(8)
                 )

ui <- fluidPage(
    selectInput('vaccine', label = 'choose vaccine', choices = c('A' , 'B')),
    DTOutput('table')
)

server <- function(input, output, session) {
    observe({
        output$table <- renderDT(df |> filter(vaccine == input$vaccine)) 
    }) |> bindEvent(input$vaccine)
}

if (interactive()) shinyApp(ui, server)

相关问题