这是我第一次有光泽的经历,而且我遇到了反应性的绊脚石。我也知道这是运行分析的一种非常笨重的方式,我将在稍后重做。
我正在努力获取它,以便根据用户输入更改直方图。
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语句需要处于被动()中,但如果有人也可以建议直方图是否也需要被动反应。
答案 0 :(得分:1)
要做的事情:
output$hist
移到shinyServer
功能将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))
})
})
<强>输出强>