因此,我尝试创建此输出,但是使用Shiny以仪表板形式创建。应当指出的是,这是我第二周使用Shiny,所以我经验不足。
这是我的代码:
library(shiny)
library(shinydashboard)
library(ggplot2)
library(dplyr)
library(gapminder)
gm <- gapminder
gm <- transform(gm, pop = as.numeric(pop))
cgm <- gm %>% group_by(continent,year) %>% summarise(totpop=sum(pop),avglifeExp=sum(pop*lifeExp)/totpop,avggdpPercap=sum(pop*gdpPercap)/totpop, numCountries=n())
body <- dashboardBody(
fluidRow(
tabBox(
title = "Population",
id = "proj", width=12,
tabPanel("Visualization", plotOutput("ggp"),
tabPanel("GapMinder Data", dataTableOutput("table")),
tabPanel("Aggregated GapMinder Data", dataTableOutput("table1"))
)
)
),
fluidRow(sliderInput("slider1", label = h3("Year"), min = 1952,
max = 2007, value = 1952, step = 5, sep ="", width="100%"))
)
# This is UI, it has a clean look because we defined body up above.
ui <- dashboardPage(
dashboardHeader(title = "Module 2"),
dashboardSidebar(
helpText("GapMinder Data: Worldwide average life expectancy, population and GPD per Capita 1952-2007"),
menuItem),
body
)
# This is server function is the same as in the layout practice.
server <- function(input, output) {
output$tabPanelSelected <- renderText({
input$proj
})
output$ggp <- renderPlot({
p <- ggplot(data=subset(gm, year==input$Year), aes(x=lifeExp)) + geom_density(alpha=.2, fill="red") + xlab("Life Expectancy")
q <- ggplot(data=subset(cgm,year==input$Year), aes(x=continent, y=totpop, fill=continent)) + geom_bar(stat="identity")
r <- ggplot(data=subset(cgm,year==input$Year), aes(x=continent, y=avggdpPercap, fill=continent)) + geom_bar(stat="identity")
print(p)
print(q)
print(r)
})
output$table <- renderDataTable({gm})
output$table1 <- renderDataTable({cgm})
}
shinyApp(ui=ui, server=server)
这是我收到的错误消息:Error Message
所以我无法弄清楚我体内的代码是怎么回事。我认为ui代码还可以,而且我几乎可以确定我的服务器代码不符合语法,但是错误消息实际上并不允许我对其进行解码。有任何想法吗?
答案 0 :(得分:0)
参考上面的图片,我已经修改了您的代码以得到类似的表示形式。
$_POST['sizes']
我对闪亮的知识最少,我觉得没有理由说明为什么没有得到任何情节。
library(shiny)
library(shinydashboard)
library(ggplot2)
library(dplyr)
library(gapminder)
gm <- gapminder
gm <- transform(gm, pop = as.numeric(pop))
cgm <- gm %>% group_by(continent,year) %>% summarise(totpop = sum(pop),avglifeExp = sum(pop*lifeExp)/totpop,avggdpPercap = sum(pop*gdpPercap)/totpop, numCountries=n())
# This is UI, it has a clean look because we defined body up above.
ui <- dashboardPage(
dashboardHeader(title = "Module 2"),
dashboardSidebar(
helpText("GapMinder Data: Worldwide average life expectancy, population and GPD per Capita 1952-2007")
),
dashboardBody(
# fluidRow(
#
# tabBox(
# title = "Population",
# id = "proj",
tabPanel("Visualization",
fluidRow(
column(4,
plotOutput("ggp")),
column(4,
plotOutput("ggp2")),
column(4,
plotOutput("ggp3"))
)
#tabPanel("GapMinder Data", dataTableOutput("table")),
#tabPanel("Aggregated GapMinder Data", dataTableOutput("table1"))
# )
#
# )
),
fluidRow(sliderInput("slider1", label = h3("Year"), min = 1952,
max = 2007, value = 1952, step = 5, sep = "", width="100%"))
)
)
# This is server function is the same as in the layout practice.
server <- function(input, output, session) {
session$onSessionEnded(stopApp)
# output$tabPanelSelected <- renderText({
# input$proj
#
# })
output$ggp <- renderPlot({
ggplot(data = subset(gm, year = input$Year), aes(x = lifeExp)) + geom_density(alpha = 0.2, fill = "red") + xlab("Life Expectancy")
})
output$ggp2 <- renderPlot({
ggplot(data = subset(cgm,year = input$Year), aes(x = continent, y = totpop, fill = continent)) + geom_bar(stat = "identity")
})
output$ggp3 <- renderPlot({
ggplot(data = subset(cgm,year = input$Year), aes(x = continent, y = avggdpPercap, fill = continent)) + geom_bar(stat = "identity")
# print(p)
# print(q)
# print(r)
})
#output$table <- renderDataTable({gm})
#output$table1 <- renderDataTable({cgm})
}
shinyApp(ui = ui, server = server)
。只需删除menuItem
,您就会发现您不再遇到上述错误。menuItem
是比较运算符,而不是赋值运算符。因此,在ggplot中将==
替换为==
。现在您至少可以看到一个图。=
中单独定义它,以便您可以
稍后在UI
代码中分配该ID,并分别定义该图。 我假设您可以根据需要改进代码。如果您有任何困难,我们可以在这里为您提供帮助。祝你好运。