如何创建对用户输入有反应的反应性数据框架

时间:2019-04-01 09:19:20

标签: r shiny shiny-reactivity

我想基于反应性数据表创建DT数据表,条形图和传单地图,用户可以在其中过滤他们感兴趣的内容。想法是,用户可以选择几个类别变量的级别,这些变量将显示在数据表,曲线图和地图中。 但是,我总是得到一个错误,即找不到对象“输入”。如何创建可在DT数据表,曲线图和地图中显示的反应性数据框?

我尝试创建一个反应性函数,该函数允许使用“子集”或“过滤器”进行过滤,但是出现了与上述相同的错误消息。我在StackOverflow和google上寻找了类似的案例,这导致我尝试在不定义反应函数的情况下过滤内容,并将过滤后的fil移到server.R,以防无法从全局R访问内容。

global.R

load("sktrad.Rdata")

options ( encoding = "UTF-8" )

data_fil <- reactive({
  data <- subset(
    sktradjkp,
    Stamomkret >= input$stamk[1] & Stamomkret <= input$stamk[2],
    Kommun == input$KomS,
    Tradslag == input$TraS,
    Tradstatus == input$TraSt
  )
})

ui.R

sidebar = dashboardSidebar(
  sidebar <- dashboardSidebar(
    sidebarMenu(
      menuItem("Information",
               tabName = "info"
      ),
      sliderInput(inputId = "stamk",
                  label = "Trädiameter inkluderat",
                  min = min(sktradjkp$Stamomkret),
                  max = max(sktradjkp$Stamomkret),
                  value = c(min(sktradjkp$Stamomkret), max(sktradjkp$Stamomkret)),
                  sep = "",
                  step = 10,
                  post = " cm "
      ),
      selectizeInput(inputId = "KomS",
                     label = "Välj en eller flera kommuner",
                     choices = unique(sktradjkp$Kommun),
                     multiple = T,
                     selected = "Jönköping"
      ),
      selectizeInput(inputId = "TraS",
                     label = "Välj en eller flera Trädslag",
                     choices = unique(sktradjkp$Tradslag),
                     multiple = T,
                     selected = "Ek"
      ),

      selectizeInput(inputId = "TraSt",
                     label = "Välj en eller flera trädstatus",
                     choices = unique(sktradjkp$Tradstatus),
                     multiple = T,
                     selected = "Friskt"
      )
    )
  )
)

server.R

output$DataSk <- DT::renderDataTable(DT::datatable(data_fil(), rownames = FALSE, 
                                                   options=list(scrollX=TRUE)
  )
)

output$BarPlot <- renderPlotly({
  ggplotly(
  ggplot(data_fil(), aes_string(x=input$StrToPlot, y="Stamomkret")) + 
    stat_summary(fun.y="mean", geom="bar") + theme(axis.text.x = element_text(angle = 45, hjust = 1,size=12)) 
  )

    })

output$coolplot <- renderPlot({

  ggplot(data_fil(), aes_string("Stamomkret")) +
    geom_histogram()
})

我希望得到一个反应函数/数据框,该函数/数据框会根据用户输入做出反应,并将结果显示在DT数据表,绘图中以及稍后在传单地图中显示。

0 个答案:

没有答案