使用renderUI中指定的值,然后在RShiny中选择Input
我一直在和一个特别为了学习RShiny的人混在一起。最终目标是按社区和城市部门类型显示关闭311个请求所需时间的时间序列图 这个想法相当直截了当,用户看到两个selectInput命令,一个下拉菜单定义波士顿的社区,然后第二个下拉菜单指定该社区内请求的相关部门 并非所有社区都有相同类型的请求,因此我使用renderUI动态呈现第二个selectInput 我现在遇到的问题是在我的服务器函数中使用renderUI获取返回给我的数据 这是我的服务器函数代码,是整个函数的编辑片段使用renderUI中指定的值,然后在RShiny中选择Input,r,dynamic,shiny,R,Dynamic,Shiny,我一直在和一个特别为了学习RShiny的人混在一起。最终目标是按社区和城市部门类型显示关闭311个请求所需时间的时间序列图 这个想法相当直截了当,用户看到两个selectInput命令,一个下拉菜单定义波士顿的社区,然后第二个下拉菜单指定该社区内请求的相关部门 并非所有社区都有相同类型的请求,因此我使用renderUI动态呈现第二个selectInput 我现在遇到的问题是在我的服务器函数中使用renderUI获取返回给我的数据 这是我的服务器函数代码,是整个函数的编辑片段 server <
server <- function(input, output) {
data <- city_data
neighborhood_dat <- reactive({
data <- selectNeighborhood(data, input$neighborhood)
})
# Uses neighborhood dat to generate the relevant list of subjects / city departments dynamically
subject_data <- reactive({
data <- neighborhood_dat()
data <- list(unique(data$SUBJECT))
data <- data[[1]]
})
# Renders the select input function dynamically, choices are based on the variable subject_data()
output$select_subject <- renderUI({
data <- subject_data()
selectInput("select_subject",
"Department: ",
choices = data)
})
# Uses ggplot to plot the data.
# The selectDept() function takes a dataframe, and selects out the relevant department.
# The idea is that the input$select_subject argument *should* be taken from the rendered selectInput.
ts_data <- reactive({
data <- selectDept(data, input$select_subject)
data$open_dt <- as.POSIXlt(data$open_dt)
mean <- neighborhood_plot(data, input$neighborhood, mean)
se <- neighborhood_plot(data, input$neighborhood, function(x) sqrt(var(x)/length(x)))
means <- fortify.zoo(means)
se <- fortify.zoo(sd)
means$se <- se$se
means <- means[1:(nrow(means)-1),]
})
output$ts_plot <- renderPlot({
plot_dat <- ts_data()
plot <- # Plot Args go here #
plot
})
}
首先,您应该使代码具有可复制性,以便人们可以运行它并验证他们的答案。您只需要生成一些模拟数据来替换代码中的真实数据 因为我无法测试它,而且我没有时间自己创建测试数据,所以我猜问题是因为您对ui项使用了相同的id并选择了输入,这让我很困惑。动态UI项需要一个id,而实际的select输入需要另一个唯一的id。然后将该id用于select输入
对于动态UI,它只是html中的一个占位符。您可以在控制台中运行htmloutselect_主题,并查看您将得到什么。出人意料的简单,对吧?然后,实际的select输入将动态插入其中。现在您有两个项目,因此需要两个唯一的id。使用uiOutput而不是htmlOutputuiOutput当前只是htmlOutput的别名。-?输出。您甚至可以尝试在控制台中运行htmlOutputselect_subject和uiOutputselect_subject,看看您得到了什么。这里没有魔法。
output$select_subject <- renderUI({
data <- subject_data()
selectInput("select_subject",
"Department: ",
choices = data)
})
ts_data <- reactive({
data <- selectDept(data, input$select_subject)
ui <- fluidPage(
titlePanel("Boston 311 Request Times"),
sidebarLayout(
sidebarPanel(
selectInput("neighborhood",
"Neighborhood: ",
choices = neighborhood_list),
htmlOutput("select_subject")
),
tabPanel("Plot",
fluidRow(
column(12, plotOutput("ts_plot"))
)
)
)
)