部署闪亮的应用程序时找不到数据对象

Bil*_*tti 8 r shiny

我正在处理我的第一个闪亮的应用程序,并且遇到了一个问题,即用于渲染我的数据表的数据没有被shinyapps.io接收.

该应用程序在我的控制台中运行良好,但是当我部署它时,应用程序在浏览器中打开并显示错误:找不到对象'Pitchers',其中'Pitchers'是我的数据对象之一.

我找到了一个建议说要将数据放在应用程序文件夹中的文件夹中,但仍然无法正常工作.

这是我当前的服务器.R代码:

shinyServer(function(input, output) {

  Pitchers <- read.csv("data/Pitchers_Edge.csv", header=TRUE, check.names = FALSE)
  Batters <- read.csv("data/Batters_Edge.csv", header=TRUE, check.names = FALSE)

  output$table1 <- renderDataTable({

    if (input$Year != "All"){
      Pitchers <- Pitchers[Pitchers$Year == input$Year,]
    } 
    Pitchers 
  })

  output$table2 <- renderDataTable({

    if (input$Year != "All"){
      Batters <- Batters[Batters$Year == input$Year,]
    } 
    Batters
  })

})
Run Code Online (Sandbox Code Playgroud)

这是ui.R代码:

shinyUI(fluidPage(
  titlePanel('Edge%: 2010-Present'),
    fluidRow(
      column(12,

                    p("Provides current and historical data on the percentage of pitches thrown to different parts of the strike zone by pitchers and to batters"),
                    p("Created and maintained by Bill Petti",
                      a("(@BillPetti)", href = "https://twitter.com/billpetti")),
                    p("Data last updated",Sys.time()))
      ),
  fluidRow(
    column(5, 
           selectInput("Year", 
                       "Year:", 
                       c("All", 
                         unique(as.character(Pitchers$Year)))))
    ),
  mainPanel(
      tabsetPanel(
        tabPanel("Pitchers", dataTableOutput(outputId = 'table1')),
        tabPanel("Batters", dataTableOutput(outputId = 'table2')),
        tabPanel("About", 
             br(), h1("About Edge%"), 
             br(), p("A few years ago, Jeff Zimmerman and I created a metric to represent how often a pitcher threw to the edges of the strike zone compared to the heart of the strike zone. The result was Edge%. The metric has evolved to include separate metrics for different edges (upper, lower, etc.). In the image below, the brown shaded areas represent the horizontal edges of the strike zone, the blue the top, and the green the bottom edges. You will notice the horizontal edges differ by batter handedness, given how umpires actually call balls and strikes."), 
             br(), img( src = "edge_image.png", height = 350, width = 700)), 
            br(), p("Edge% is useful in a number of contexts. For example, we know that as pitchers age they lose velocity and therefore need to avoid throwing to the heart of the plate to be successful. Edge% provides a quick look at who is adjusting to lower velocity and who isn't. It can also be used to see how pitchers are adjusting to hitters as they age (i.e. as hitters improve, pitchers may avoid the heart of the plate more, or as hitters decline they may begin challenge them more."), 
            br(), p("For more information on Edge%, check out these articles:", 
            br(), br(), a("Introduction to Edge%", href = "http://www.fangraphs.com/blogs/the-difference-pitching-on-the-edge-makes/"), 
            br(), br(), a("Collection of Articles Using and Expanding on Edge%", href = "http://www.fangraphs.com/blogs/category/edge/"),
            br(), br(), a("Most Recent Version", href = "http://www.hardballtimes.com/expanding-the-edges-of-the-strike-zone/") 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   )
                 )
)
)
)
Run Code Online (Sandbox Code Playgroud)

我正在从Windows PC部署.

不胜感激任何建议!

更新

我接受了科林的建议并更新了我的代码,但我仍然遇到了同样的问题.

以下是我的应用在部署时应该是什么样子:

http://i.stack.imgur.com/idmvC.jpg

以下是我在本地或网络上发布和查看时会发生的情况:

http://i.stack.imgur.com/ikBrD.jpg

这不仅仅是对象丢失,而且我可以看到应用程序的其余部分.整个应用程序就消失了.

这是我更新的代码:

library(shiny)

shinyServer(function(input, output) {

  Pitchers <- reactive({read.csv("data/Pitchers_Edge.csv", header=TRUE, check.names = FALSE)})
  Batters <- reactive({read.csv("data/Batters_Edge.csv", header=TRUE, check.names = FALSE)})

  output$table1 <- renderDataTable({
    Pitchers <- Pitchers()
    if (input$Year != "All"){
      Pitchers <- Pitchers[Pitchers$Year == input$Year,]
    } 
    subset(Pitchers, Pitchers$'# of total pitches'>= input$pitch_total) 
  })

  output$table2 <- renderDataTable({
    Batters <- Batters()
    if (input$Year != "All"){
      Batters <- Batters[Batters$Year == input$Year,]
    } 
    subset(Batters, Batters$'# of total pitches'>= input$pitch_total)
  })

})

shinyUI(fluidPage(
  titlePanel('Edge%: 2010-Present'),
  fluidRow(
    column(12,
           p("Provides current and historical data on the percentage of pitches thrown to different parts of the strike zone by pitchers and to batters"),
           p("Created and maintained by Bill Petti",
             a("(@BillPetti)", href = "https://twitter.com/billpetti")),
           p("Data last updated",Sys.time()))
  ), 
    sidebarLayout(
    sidebarPanel(selectInput("Year", 
                                    "Year:", 
                                    c("All", 
                                      unique(as.character(Pitchers$Year)))),
                 numericInput("pitch_total", 
                             label = "Minimum # of Pitches:",
                             value = 300)
  )
  ,
  mainPanel(
    tabsetPanel(
      tabPanel("Pitchers", dataTableOutput(outputId = 'table1')),
      tabPanel("Batters", dataTableOutput(outputId = 'table2')),
      tabPanel("About", 
               br(), h1("About Edge%"), 
               br(), p("A few years ago, Jeff Zimmerman and I created a metric to represent how often a pitcher threw to the edges of the strike zone compared to the heart of the strike zone. The result was Edge%. The metric has evolved to include separate metrics for different edges (upper, lower, etc.). In the image below, the brown shaded areas represent the horizontal edges of the strike zone, the blue the top, and the green the bottom edges. You will notice the horizontal edges differ by batter handedness, given how umpires actually call balls and strikes."), 
               br(), img( src = "edge_image.png", height = 350, width = 700), 
      br(), p("Edge% is useful in a number of contexts. For example, we know that as pitchers age they lose velocity and therefore need to avoid throwing to the heart of the plate to be successful. Edge% provides a quick look at who is adjusting to lower velocity and who isn't. It can also be used to see how pitchers are adjusting to hitters as they age (i.e. as hitters improve, pitchers may avoid the heart of the plate more, or as hitters decline they may begin challenge them more."), 
      br(), p("For more information on Edge%, check out these articles:"), 
              br(), a("Introduction to Edge%", href = "http://www.fangraphs.com/blogs/the-difference-pitching-on-the-edge-makes/"), 
              br(), br(), a("Collection of Articles Using and Expanding on Edge%", href = "http://www.fangraphs.com/blogs/category/edge/"),
              br(), br(), a("Most Recent Version", href = "http://www.hardballtimes.com/expanding-the-edges-of-the-strike-zone/") 
      )
    )))))
Run Code Online (Sandbox Code Playgroud)

Sho*_*rpy 6

哦! 我认为你没有加载投手文件作为ui.R脚本的一部分.因此,当您定义年份输入时,它无法找到Pitchers $ year.您可以尝试在shinyUI()通话上方的ui脚本中阅读投手文件吗?

关于数据injest闪亮的一些东西:如果你的数据不会定期更改,你不需要你的数据摄取是被动的.只需在shinyServer()调用之前将其放在服务器文件的最开头即可.当您部署应用程序时,这部分代码只运行一次,因此它是进行任何library()调用,数据注入或预处理不依赖于用户的任何方式的东西的好地方.您可以read.csv()像在常规R中一样使用它,有时保存数据帧的二进制文件也是好的,因为read.csv可能有点慢.

如果要改变(就像更新的csv将定期放入文件中)那么将read.csv()呼叫置于呼叫之下,shinyServer()但同样不应该被激活.

希望有所帮助!