如何在ui中使用反应函数作为输入的结果? - 闪亮

How to use the result of using reactive function as input in ui? - r shiny

我在服务器上使用了反应函数来创建数据框。

并且我想将此数据框的一列的唯一向量表示为 UI 中的 selectinput。

例如)

DATA<-data.frame(ID, NAME)

####server#####
DATAFRAME<-reactive({DATA[DATA$ID %in% input$ID,})

####UI######
selectizeInput("name",label="name:",choices=unique(DATAFRAME$NAME))

换句话说,我想显示一个预先按ID精炼过一次的数据的名称列表。

为了对反应式表达式 DATAFRAME 的变化做出反应,您可以使用 observer 并使用 updateSelectizeInput 更新名称列表(正如@MrFlick 所指出的)。

library(shiny)

ui <- fluidPage(
    titlePanel("Widget Dependencies Sample App"),
    selectizeInput("IdSelect", "Choose ID", "N/A"), # IDs to select from
    selectizeInput("IdName", "Choose Name", "N/A"), # Names depend on selected ID
    tableOutput("IdDatatable") # show the whole data set to understand what happens
)

server <- function(input, output, session) {
  ID   <- paste("ID", 1:3, sep = "_")
  NAME <- LETTERS[1:(3*5)]
  DATA <- data.frame(ID, NAME)
  updateSelectizeInput(session, "IdSelect", choices = unique(ID))

  DATAFRAME <- reactive({DATA[DATA$ID %in% input$IdSelect, ]})

  observe({
   updateSelectizeInput(session, "IdName", choices = unique(DATAFRAME()$NAME))
  })

  output$IdDatatable <- renderTable(DATA)
}

shinyApp(ui = ui, server = server)

但是,如果只需要一次反应式表达式 DATAFRAME,则可以使代码更简单。在那种情况下,您不会观察到对小部件中的更改做出反应的 DATAFRAME。您可以省略 DATAFRAME 并直接观察输入小部件。该观察者生成 Names 的过滤向量,并仅用一个观察者更改 selectizeInput 中的选择。

observe({
    Names <- DATA$NAME[DATA$ID %in% input$IdSelect]
    updateSelectizeInput(session, "IdName", choices = unique(Names))
})