Почему мое приложение работает локально, а не на shinyapps.io? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь развернуть свое блестящее приложение на shinyapps.io и получаю следующее сообщение:

"Произошла ошибка. Приложение не запустилось (выход с кодом 1)."

Я пытался зафиксировать строку setwd и другие вещи, но пока не нашел решения.

Возможно, проблема в неправильном пути к файлу?Должен ли я вставить строку «read.csv» в мой сервер или функцию пользовательского интерфейса?

Вот мой код:

#setwd(dir = "/media/miles/MILES/Projets & Cours/Master_1/Semestre 2/lardjane/Shiny_app/Projet Shiny")
matches <- read.csv('./matches.csv', stringsAsFactors=FALSE, sep=",", header=TRUE)

matches <- matches[,c(3,6)]
#summary(matches)

matches$platformid <- as.factor(matches$platformid)
#levels(matches$platformid)

#install.packages('shiny')
library(shiny)
#install.packages('rsconnect')
library(rsconnect)

ui <- shinyUI(fluidPage(    

    # Give the page a title
    titlePanel("Game time by server"),

    # Generate a row with a sidebar
    sidebarLayout(      

      # Define the sidebar with one input
      sidebarPanel(
        selectInput("region", "Server:", 
                    choices=levels(matches$platformid)),
        hr(),
        selectInput(inputId = "n_breaks",
                    label = "Number of bins in histogram (approximate):",
                    choices = c(10, 20, 35, 50),
                    selected = 20),
        hr(),
        checkboxInput(inputId = "individual_obs",
                      label = strong("Show individual observations"),
                      value = FALSE),

        checkboxInput(inputId = "density",
                      label = strong("Show density estimate"),
                      value = FALSE),

        conditionalPanel(condition = "input.density == true",
                         sliderInput(inputId = "bw_adjust",
                          label = "Bandwidth adjustment:",
                          min = 0.2, max = 2, value = 1, step = 0.2)),
        hr(),
        helpText("Data from Kaggle (2014-2018) League of Legends Ranked Matches.")
      ),

      # Create a spot for the barplot
      mainPanel(
        plotOutput("timePlot")  
      )

    )
  )
)





server <- function(input, output) {

  # Fill in the spot we created for a plot
  output$timePlot <- renderPlot({

    # Render a histogramme
    hist(matches[matches$platformid==input$region,2], 
            probability = TRUE,
            breaks = as.numeric(input$n_breaks),
            main = "Game Time",
            ylab="",
            xlab="Duration (seconds)")

    if (input$individual_obs) {
      rug(matches[matches$platformid==input$region,2])
    }

    if (input$density) {
      dens <- density(matches[matches$platformid==input$region,2],
                      adjust = input$bw_adjust)
      lines(dens, col = "blue")
    }

  })
}


shinyApp(ui = ui, server = server)


Я хотел бы добавить один последний запрос.Я хотел бы отобразить код R чуть ниже графика.Это может каждый может получить доступ к обоим (результат приложения и код R).Это возможно?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

swd не способ решить эту проблему из-за того, как работают среды в Shiny (и R в целом). Когда вы запускаете Shiny, вы фактически не знаете, на каком физическом сервере работает ваш Shiny. Поэтому вам нужно использовать универсальное решение.

Попробуйте это:

matches <- read.csv('./matches.csv', 
                     stringsAsFactors=FALSE, sep=",", header=TRUE)


0 голосов
/ 09 мая 2019

Per https://docs.rstudio.com/shinyapps.io/Storage.html,, если CSV-файл находится в том же месте, что и приложение, попробуйте:

matches <- read.csv('matches.csv', stringsAsFactors=FALSE, sep=",", header=TRUE)

Однако я не думаю, что это ваша проблема; Я думаю, что проблема в том, как вы делаете сюжет. Вы используете input$region для генерации своей гистограммы, но не предоставляете значение по умолчанию, поэтому оно начинается с NULL, что вызывает проблему при попытке построения гистограммы. У вас есть 2 варианта, чтобы решить эту проблему.

Опция 1 - установить значение по умолчанию для input$region с помощью:

selectInput("region", "Server:", 
                    choices=levels(matches$platformid),
                    selected = levels(matches$platformid)[1]),

Вариант 2 - использовать req(), чтобы гистограмма не работала, если какое-либо из ее обязательных значений не truey :

server <- function(input, output) {

  # Fill in the spot we created for a plot
  output$timePlot <- renderPlot({

    req(input$region, input$n_breaks)

    # Render a histogramme
    hist(matches[matches$platformid==input$region,2], 
            probability = TRUE,
            breaks = as.numeric(input$n_breaks),
            main = "Game Time",
            ylab="",
            xlab="Duration (seconds)")

    if (input$individual_obs) {
      rug(matches[matches$platformid==input$region,2])
    }

    if (input$density) {
      dens <- density(matches[matches$platformid==input$region,2],
                      adjust = input$bw_adjust)
      lines(dens, col = "blue")
    }

  })
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...