根据Shiny应用程序的用户输入更改使用的数据

时间:2015-12-23 02:23:38

标签: r shiny

这是我第一次有光泽的经历,而且我遇到了反应性的绊脚石。我也知道这是运行分析的一种非常笨重的方式,我将在稍后重做。

我正在努力获取它,以便根据用户输入更改直方图。

ui.R是:

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("United States Population Pyramid 2015-2090"),
  sidebarPanel(
    radioButtons("iradio", label = h3("Select year"),
             choices = list("2015" = 2015, "2040" = 2040, "2065" = 2065, "2090" = 2090), selected = 2015))
  ,
  mainPanel(
  plotOutput('hist')
  )   
))

服务器.R是:

library(shiny)
library(plotrix)
xx.2015<-c(3.0, 3.1, 3.1, 3.1, 3.5, 3.3, 3.4, 3.0, 3.2, 3.2, 3.6, 3.5, 3.0, 2.6, 1.9, 1.4, 1.1, 0.8, 0.4, 0.1, 0.0)
xy.2015<-c(3.1, 3.3, 3.3, 3.3, 3.7, 3.5, 3.5, 3.1, 3.2, 3.2, 3.5, 3.4, 2.8, 2.4, 1.6, 1.1, 0.8, 0.5, 0.2, 0.0, 0.0)
xx.2040<-c(2.9, 2.9, 2.9, 3.0, 3.0, 3.0, 3.1, 3.1, 3.0, 3.2, 3.0, 2.9, 2.5, 2.6, 2.4, 2.5, 2.1, 1.4, 0.7, 0.2, 0.0)
xy.2040<-c(3.0, 3.0, 3.1, 3.1, 3.1, 3.1, 3.2, 3.1, 3.1, 3.4, 3.1, 2.9, 2.5, 2.5, 2.3, 2.2, 1.7, 1.0, 0.4, 0.1, 0.0)
xx.2065<-c(2.8, 2.8, 2.8, 2.9, 2.9, 2.9, 3.0, 3.0, 3.0, 3.0, 2.8, 2.9, 2.8, 2.6, 2.7, 2.3, 2.0, 1.4, 0.9, 0.4, 0.1)
xy.2065<-c(2.9, 2.9, 3.0, 3.0, 3.0, 3.0, 3.1, 3.1, 3.1, 3.0, 2.9, 2.9, 2.8, 2.6, 2.7, 2.2, 1.8, 1.2, 0.7, 0.2, 0.1)
xx.2090<-c(2.7, 2.7, 2.7, 2.7, 2.8, 2.8, 2.9, 2.9, 2.9, 2.8, 2.8, 2.8, 2.8, 2.7, 2.6, 2.4, 2.2, 1.7, 1.2, 0.6, 0.2)
xy.2090<-c(2.8, 2.8, 2.8, 2.9, 2.9, 2.9, 3.0, 3.0, 2.9, 2.9, 2.9, 2.9, 2.8, 2.7, 2.6, 2.3, 2.0, 1.5, 0.9, 0.4, 0.1)

agelabels<-c("0-4","5-9","10-14","15-19","20-24","25-29","30-34",
         "35-39","40-44","45-49","50-54","55-59","60-64","65-69","70-74",
         "75-79","80-44","85-89", "90-94", "95-99", "100+")

shinyServer(
  function(input, output) {

  if (input$iradio == 2015) {
    xx.pop <- xx.2015
    xy.pop <- xy.2015
  }

  if (input$iradio == 2040) {
    xx.pop <- xx.2040
    xy.pop <- xy.2040
  }

  if (input$iradio == 2065) {
    xx.pop <- xx.2065
    xy.pop <- xy.2065
  }
})

output$hist<-renderPlot({
  func()
  par(mar=pyramid.plot(xy.pop,xx.pop,labels=agelabels,
                       lxcol="lightblue",rxcol="pink",
                       gap=0.5,show.values=TRUE))
})

我得到的当前错误是     .getReactiveEnvironment()中的错误$ currentContext():没有活动的响应上下文时不允许操作。 (你试图做一些只能在反应式表达式或观察者内部完成的事情。)

我意识到if语句需要处于被动()中,但如果有人也可以建议直方图是否也需要被动反应。

1 个答案:

答案 0 :(得分:1)

要做的事情:

  1. output$hist移到shinyServer功能
  2. if语句移到output$hist函数

    shinyServer(function(input, output) {
        output$hist<-renderPlot({
          if (input$iradio == 2015) {
            xx.pop <- xx.2015
            xy.pop <- xy.2015
          }
    
          if (input$iradio == 2040) {
            xx.pop <- xx.2040
            xy.pop <- xy.2040
          }
    
          if (input$iradio == 2065) {
            xx.pop <- xx.2065
            xy.pop <- xy.2065
          }
    
    
          par(mar=pyramid.plot(xy.pop,xx.pop,labels=agelabels,
                               lxcol="lightblue",rxcol="pink",
                               gap=0.5,show.values=TRUE))
        })
      })
    
  3. <强>输出

    enter image description here