关于使用BLS API的闪亮应用程序

时间:2014-04-28 20:57:47

标签: r ggplot2 shiny

我正在尝试使用库(RJSONIO)导入BLS数据。 导入的数据位于数据框中,我可以使用ggplot绘制。

我无法将代码转换为闪亮的应用程序。

请指导我。

Server.R

library(shiny)    
library(RCurl)
library(RJSONIO)
library(ggplot2)

bls.content <- getURLContent("http://api.bls.gov/publicAPI/v1/timeseries/data/CES6056132001")




bls.json <- fromJSON(bls.content, simplify=TRUE)
tmp <-bls.json$Results[[1]][[1]]
bls.df <- data.frame(year=sapply(tmp$data,"[[","year"),
                     period=sapply(tmp$data,"[[","period"),
                     periodName=sapply(tmp$data,"[[","periodName"),
                     value=as.numeric(sapply(tmp$data,"[[","value")), 
                     stringsAsFactors=FALSE)





bls.df[bls.df$periodName!="Annual", ]

shinyServer(function(input, output) {

  output$displot <- reactiveplot({
        ggplot(data=bls.df, aes(x=year, y=value, group=period)),
        gg <- ggplot(data=bls.df, aes(x=year, y=value, group=period)), 
        gg <- gg + geom_bar(stat="identity", position="dodge", aes(fill=period)),
        gg


  })

})

** ** UI.R

library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("BLS data"),
  sidebarPanel(
    selectInput("dataset", "Commodity:",
                ))),


mainPanel(
    h3(textOutput("commSelected")),

    verbatimTextOutput("CommodityTable"),

    plotOutput("CommodityPlot")
  ))

1 个答案:

答案 0 :(得分:2)

你的代码写的方式有些问题,我会尝试解释最严重错误的位置。

ui.R

shinyUI(pageWithSidebar(

  headerPanel("BLS data"),
  sidebarPanel(
    selectInput("dataset", "Commodity:",c(1,2)
    )),


  mainPanel(
    h3(textOutput("commSelected")),

    verbatimTextOutput("CommodityTable"),

    plotOutput("CommodityPlot")
  ))
)

关键问题在于:

  • pageWithSidebar已弃用 - 尽管它可以正常工作。
  • selectInput有三个必需元素,inputId,label和choices。你没有在那里提供任何选择。它应该是selectInput(&#34; dataset&#34;,&#34; Commodity:&#34;,...)其中...是选项列表。我不熟悉你在这里使用的数据,所以我没有花时间去选择正确的选项列表。如果选项列表是固定的,那么使用我所做的格式,c(a,b,c,...) - 如果它来自你的数据,你可以引用在global.R中加载的东西(另一个文件你可以有可能类似于bls.df $ Commodities。
  • 在sidebarPanel之后你有太多的括号 - 在你到达mainPanel之前你关闭了整个shinyUI。我把令人讨厌的括号移到了最后。

<强烈> server.R

library(shiny)    
library(RCurl)
library(RJSONIO)
library(ggplot2)

bls.content <- getURLContent("http://api.bls.gov/publicAPI/v1/timeseries/data/CES6056132001")

bls.json <- fromJSON(bls.content, simplify=TRUE)
tmp <-bls.json$Results[[1]][[1]]
bls.df <- data.frame(year=sapply(tmp$data,"[[","year"),
                 period=sapply(tmp$data,"[[","period"),
                 periodName=sapply(tmp$data,"[[","periodName"),
                 value=as.numeric(sapply(tmp$data,"[[","value")), 
                 stringsAsFactors=FALSE)

shinyServer(function(input, output) {

  output$CommodityPlot <- renderPlot({
    ggplot(data=bls.df, aes(x=year, y=value, group=period))
    gg <- ggplot(data=bls.df, aes(x=year, y=value, group=period)) 
    gg <- gg + geom_bar(stat="identity", position="dodge", aes(fill=period))
    gg    
  }) 
})

这里的关键问题是:

  • 首先 - 您没有将图形输出绑定到您在ui.R中指定的输入之一。你命名了plotOutput&#34; CommodityPlot&#34;但是你将图形绑定到了调度。请记住,您的输出必须绑定到您的输入。
  • 不推荐使用reactivePlot - 我将其切换为renderPlot
  • 在renderPlot中,你的ggplot的每一行后都有一个逗号。你的每一行都是一个完整的陈述,所以逗号破坏了代码。我删除了它们。请记住,在R中,只要代码在{}之内,您就不需要使用;并且行永远不会以a,。
  • 终止

现在,我已经调试了你的代码,它适用于我(我运行RStudio 0.98.978,闪亮版本0.10.1)。你的应用程序仍然非常不完整 - 你已经为你的verbatimTextOutput&#34; CommodityTable&#34;或者你的textOutput&#34; commSelected&#34;并且您的数据似乎甚至没有商品,因此我不知道您计划选择什么。闪亮的文档非常好 - 我强烈建议您访问the Shiny gallery以查看闪亮应用程序的工作示例以及驱动它们的代码。