使用renderUI中指定的值,然后在RShiny中选择Input

使用renderUI中指定的值,然后在RShiny中选择Input,r,dynamic,shiny,R,Dynamic,Shiny,我一直在和一个特别为了学习RShiny的人混在一起。最终目标是按社区和城市部门类型显示关闭311个请求所需时间的时间序列图 这个想法相当直截了当,用户看到两个selectInput命令,一个下拉菜单定义波士顿的社区,然后第二个下拉菜单指定该社区内请求的相关部门 并非所有社区都有相同类型的请求,因此我使用renderUI动态呈现第二个selectInput 我现在遇到的问题是在我的服务器函数中使用renderUI获取返回给我的数据 这是我的服务器函数代码,是整个函数的编辑片段 server <

我一直在和一个特别为了学习RShiny的人混在一起。最终目标是按社区和城市部门类型显示关闭311个请求所需时间的时间序列图

这个想法相当直截了当,用户看到两个selectInput命令,一个下拉菜单定义波士顿的社区,然后第二个下拉菜单指定该社区内请求的相关部门

并非所有社区都有相同类型的请求,因此我使用renderUI动态呈现第二个selectInput

我现在遇到的问题是在我的服务器函数中使用renderUI获取返回给我的数据

这是我的服务器函数代码,是整个函数的编辑片段

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"))

            )

        )

    )

)