R Shiny - 我的观察函数 ({UpdateSelectInput}) 有什么问题?
R Shiny - What is the problem with my observe function ({UpdateSelectInput})?
我已经针对我的问题查看了类似的帖子,但没有任何帮助,我 运行 失去了耐心。
我有一个非常简单的应用程序,我试图在其中找到 selected 美国州内的所有县。我在 UI 中使用 SelectInput 让用户 select 他们想要的状态,并在服务器中使用 UpdateSelectInput 以便用户可以 select 他们想要从他们的状态 selection.
这是我的简化数据的样子:
**STATE_NAME NAMELSAD**
Alabama Clay County
Alabama Marengo County
Arkansas Scott County
我的代码如下所示:
global.r
library(shiny)
library(leaflet)
library(sp)
library(rgdal)
library(htmltools)
library(DT)
library(ggplot2)
library(shinythemes)
path <- "C:/Users/user/Desktop/Countyapp/Countyapp/test_covid/"
setwd(path)
counties <- read.csv("us_counties1.csv")
UI.r
ui <- fluidPage(
selectInput(inputId = "selectstate", label = "Select State", choices = (counties$STATE_NAME)),
selectInput(inputId = "selectcounty", label = "Select County", choices = NULL)
)
最后,server.R
server <- function(session, input, output) {
observe({
updateSelectInput(session, "selectcounty", "Select County",
choices = counties$NAMELSAD[counties$STATE_NAME==input$STATE_NAME])
})
}
shinyApp(ui = ui, server = [enter image description here][1]server)
基本上我的第一个SelectInput就可以了,你可以选择任何你想要的状态。但是第二个 selector 是空白的!为什么。
我的观察功能有问题,但我一直坐在这里,没有可能的解决方案。
如果可以的话请帮忙!谢谢!
observe()
函数的目的是观察反应式表达式的变化。但是,updateSelectInput()
不是您所写的 reactive 表达式,因为其中的 none 表达式涉及任何反应值或表达式。
相反,您应该 observe()
更改输入的值,例如,像这样:
observe({
if(input$selectstate != ""){
updateSelectInput(session, "selectcounty", "Select County",
choices = counties$NAMELSAD[counties$STATE_NAME==input$selectstate,])
}
else {
updateSelectInput(session, "selectcounty", "Select County",
choices = "Select State")
}
})
observe
中的表达式现在是反应式的,因为 input
是反应式的。
有关精彩讨论,请参阅 。
而不是 observe
,尝试使用 observeEvent
还有一个错别字,input$STATE_NAME
应该是input$selectstate
下面是一个最小的工作示例:
library(shiny)
#Create your dataframe (runs once when app starts)
counties <- data.frame(
STATE_NAME = c('Alabama', 'Alabama', 'Arkansas'),
NAMELSAD = c('Clay County', 'Marengo County', 'Scott County'),
stringsAsFactors = FALSE
)
#UI
ui <- fluidPage(
selectInput(inputId = "selectstate", label = "Select State", choices = (counties$STATE_NAME)),
selectInput(inputId = "selectcounty", label = "Select County", choices = NULL)
)
#Server
server <- function(input, output, session) {
#Runs when input$selectstate changes
observeEvent(input$selectstate, {
updateSelectInput(session, inputId = "selectcounty", label = "Select County", choices = counties[counties$STATE_NAME == input$selectstate,]$NAMELSAD)
})
}
shinyApp(ui, server)
天哪,我傻了。
这是因为我在观察事件中输入错误的名称。
成功了。答案:
observe({
updateSelectInput(session, "selectcounty", "Select County",
choices = counties$NAMELSAD[counties$STATE_NAME==input$selectstate])
})
我已经针对我的问题查看了类似的帖子,但没有任何帮助,我 运行 失去了耐心。
我有一个非常简单的应用程序,我试图在其中找到 selected 美国州内的所有县。我在 UI 中使用 SelectInput 让用户 select 他们想要的状态,并在服务器中使用 UpdateSelectInput 以便用户可以 select 他们想要从他们的状态 selection.
这是我的简化数据的样子:
**STATE_NAME NAMELSAD**
Alabama Clay County
Alabama Marengo County
Arkansas Scott County
我的代码如下所示:
global.r
library(shiny)
library(leaflet)
library(sp)
library(rgdal)
library(htmltools)
library(DT)
library(ggplot2)
library(shinythemes)
path <- "C:/Users/user/Desktop/Countyapp/Countyapp/test_covid/"
setwd(path)
counties <- read.csv("us_counties1.csv")
UI.r
ui <- fluidPage(
selectInput(inputId = "selectstate", label = "Select State", choices = (counties$STATE_NAME)),
selectInput(inputId = "selectcounty", label = "Select County", choices = NULL)
)
最后,server.R
server <- function(session, input, output) {
observe({
updateSelectInput(session, "selectcounty", "Select County",
choices = counties$NAMELSAD[counties$STATE_NAME==input$STATE_NAME])
})
}
shinyApp(ui = ui, server = [enter image description here][1]server)
基本上我的第一个SelectInput就可以了,你可以选择任何你想要的状态。但是第二个 selector 是空白的!为什么。 我的观察功能有问题,但我一直坐在这里,没有可能的解决方案。 如果可以的话请帮忙!谢谢!
observe()
函数的目的是观察反应式表达式的变化。但是,updateSelectInput()
不是您所写的 reactive 表达式,因为其中的 none 表达式涉及任何反应值或表达式。
相反,您应该 observe()
更改输入的值,例如,像这样:
observe({
if(input$selectstate != ""){
updateSelectInput(session, "selectcounty", "Select County",
choices = counties$NAMELSAD[counties$STATE_NAME==input$selectstate,])
}
else {
updateSelectInput(session, "selectcounty", "Select County",
choices = "Select State")
}
})
observe
中的表达式现在是反应式的,因为 input
是反应式的。
有关精彩讨论,请参阅
而不是 observe
,尝试使用 observeEvent
还有一个错别字,input$STATE_NAME
应该是input$selectstate
下面是一个最小的工作示例:
library(shiny)
#Create your dataframe (runs once when app starts)
counties <- data.frame(
STATE_NAME = c('Alabama', 'Alabama', 'Arkansas'),
NAMELSAD = c('Clay County', 'Marengo County', 'Scott County'),
stringsAsFactors = FALSE
)
#UI
ui <- fluidPage(
selectInput(inputId = "selectstate", label = "Select State", choices = (counties$STATE_NAME)),
selectInput(inputId = "selectcounty", label = "Select County", choices = NULL)
)
#Server
server <- function(input, output, session) {
#Runs when input$selectstate changes
observeEvent(input$selectstate, {
updateSelectInput(session, inputId = "selectcounty", label = "Select County", choices = counties[counties$STATE_NAME == input$selectstate,]$NAMELSAD)
})
}
shinyApp(ui, server)
天哪,我傻了。
这是因为我在观察事件中输入错误的名称。
成功了。答案:
observe({
updateSelectInput(session, "selectcounty", "Select County",
choices = counties$NAMELSAD[counties$STATE_NAME==input$selectstate])
})