传递反应数据作为 updateSelectizeInput 的选择
Passing reactive data as choices for updateSelectizeInput
我正在尝试将反应数据传递给 updateSelectizeInput,但出现以下错误:
.getReactiveEnvironment()$currentContext() 错误:
没有活动的反应上下文不允许操作。 (你试图做一些只能从反应式表达式或观察者内部完成的事情。)
我的代码如下:
ui.R
library(shiny)
ui_panel <-
tabPanel("Text Input Test",
sidebarLayout(
sidebarPanel(
selectizeInput('Organisations', label = "Organisation Search",
choices = NULL, options = list(
placeholder = 'Type the organisation name', maxOptions = 10,
maxItems = 1, searchConjunction = 'and')),
tags$style(type="text/css",
".selectize-input::after{visibility:hidden;};"
),
br(),
selectInput(
inputId="selectData",
label=" ",
choices=c("Universities", "Hospitals")
),
br()
),
mainPanel(
tabsetPanel(
tabPanel("output of Organisation search
details",htmlOutput("orgsearchdetails"))
)
)
))
ui <- shinyUI(navbarPage(" ",ui_panel))
server.R
library(shiny)
shinyServer(
function(input, output, session) {
orgdata <- reactive({if(input$selectData=='Universities'){
orgdata <- read.csv("universities.csv")
}else if (input$selectData=='Hospitals'){
orgdata <- read.csv("hospitals.csv")
}
orgdata
})
updateSelectizeInput(session, 'Organisations', choices =
as.character(unique(
orgdata()$name)), server = TRUE)
output$orgsearchdetails <-renderUI({
})
session$onSessionEnded(function() { dbDisconnect(con) })
})
有什么方法可以将 selectInput 的反应性传递给 updateSelectizeInput 吗?
我选择 updateSelectizeInput 而不是反应式 selectInput,以避免在应用程序启动时填充字段。
非常欢迎任何帮助或见解。提前谢谢你。
我算不上什么光鲜的专家,但从我一直在构建的仪表板来看,这就是我会做的。我会创建一个名为 selectedData
的 reactiveValues
变量。然后在我的 observeEvent
中,我将提取 csv 并更新 selectedData
。我选择在我的应用程序中使用 reactiveValues
的原因是它们可以是有状态的,而不是总是对某些输入做出反应,而且我可以在应用程序的其他需要相同信息的区域调用它们。至于使用 observeEvent
,这很简单,因为您可以将 updateSelectizeInput
包裹在观察者中。
shinyServer(
function(input, output, session) {
# init reactiveValues
selectedData <- reactiveValues()
observeEvent(input$selectData, {
if (input$selectData == "Universities") {
selectedData$orgdata <- read.csv("universities.csv")
} else if (input$selectData == "Hospitals") {
selectedData$orgdata <- read.csv("hospitals.csv")
}
updateSelectizeInput(session, "Organisations",
choices = as.character(unique(selectedData$orgdata$name)),
server = TRUE)
})
... # rest of your code
}
)
我正在尝试将反应数据传递给 updateSelectizeInput,但出现以下错误:
.getReactiveEnvironment()$currentContext() 错误: 没有活动的反应上下文不允许操作。 (你试图做一些只能从反应式表达式或观察者内部完成的事情。)
我的代码如下:
ui.R
library(shiny)
ui_panel <-
tabPanel("Text Input Test",
sidebarLayout(
sidebarPanel(
selectizeInput('Organisations', label = "Organisation Search",
choices = NULL, options = list(
placeholder = 'Type the organisation name', maxOptions = 10,
maxItems = 1, searchConjunction = 'and')),
tags$style(type="text/css",
".selectize-input::after{visibility:hidden;};"
),
br(),
selectInput(
inputId="selectData",
label=" ",
choices=c("Universities", "Hospitals")
),
br()
),
mainPanel(
tabsetPanel(
tabPanel("output of Organisation search
details",htmlOutput("orgsearchdetails"))
)
)
))
ui <- shinyUI(navbarPage(" ",ui_panel))
server.R
library(shiny)
shinyServer(
function(input, output, session) {
orgdata <- reactive({if(input$selectData=='Universities'){
orgdata <- read.csv("universities.csv")
}else if (input$selectData=='Hospitals'){
orgdata <- read.csv("hospitals.csv")
}
orgdata
})
updateSelectizeInput(session, 'Organisations', choices =
as.character(unique(
orgdata()$name)), server = TRUE)
output$orgsearchdetails <-renderUI({
})
session$onSessionEnded(function() { dbDisconnect(con) })
})
有什么方法可以将 selectInput 的反应性传递给 updateSelectizeInput 吗?
我选择 updateSelectizeInput 而不是反应式 selectInput,以避免在应用程序启动时填充字段。
非常欢迎任何帮助或见解。提前谢谢你。
我算不上什么光鲜的专家,但从我一直在构建的仪表板来看,这就是我会做的。我会创建一个名为 selectedData
的 reactiveValues
变量。然后在我的 observeEvent
中,我将提取 csv 并更新 selectedData
。我选择在我的应用程序中使用 reactiveValues
的原因是它们可以是有状态的,而不是总是对某些输入做出反应,而且我可以在应用程序的其他需要相同信息的区域调用它们。至于使用 observeEvent
,这很简单,因为您可以将 updateSelectizeInput
包裹在观察者中。
shinyServer(
function(input, output, session) {
# init reactiveValues
selectedData <- reactiveValues()
observeEvent(input$selectData, {
if (input$selectData == "Universities") {
selectedData$orgdata <- read.csv("universities.csv")
} else if (input$selectData == "Hospitals") {
selectedData$orgdata <- read.csv("hospitals.csv")
}
updateSelectizeInput(session, "Organisations",
choices = as.character(unique(selectedData$orgdata$name)),
server = TRUE)
})
... # rest of your code
}
)