2017-04-10 2 views
0

Je travaille sur brillant et face à certains problèmes de déploiement sur shinyApps.io. Quand je l'application en cours d'exécution en studio R IDE est tout à fait bien, mais ne peut pas travailler sur shinyApps.io et spectacle:R brillant déploiement sur shinyApps.io

ERROR: cannot open the connection 

Je l'ai déjà publié trois fichiers (ui, serveur, data.csv) à shinyApps.io mais encore ne peut pas fonctionner. Je pense qu'il est parce que les données ne peuvent pas être lus lorsque je vérifie les journaux sur shinyApps.io, show:

cannot open file 'C:\Users\User\Downloads\Category_dashboard\ads_test\rawdash.csv': No such file or directory 

Quelqu'un peut-il aider cette question?

ui:

# package 
library(shiny) 
library(shinydashboard) 
library(devtools) 
library(xts) 
library(dplyr) 
library(ggplot2) 
library(dplyr) 
library(DT) 
library(readxl) 
# graphic 
library(streamgraph) 
library(treemap) 
library(bubbles) 
library(googleVis) 
library(dygraphs) 
# share to server 
library(rsconnect) 
library(RJSONIO) 

# read data 
dash_path <- file.path("C:\\Users\\User\\Downloads\\Category_dashboard\\ads_test\\rawdash.csv") 
dash <- read.csv(dash_path, 
       colClasses = c("character","character","character","character","character","character","numeric","numeric")) 

# app 
ui <- dashboardPage(skin="black", 
        dashboardHeader(title = "Segment Dashboard", titleWidth = 300), 

        dashboardSidebar(selectInput("c1_input", label = "Segment", 
               choices = c(unique(dash$c1)), multiple = TRUE), 
            selectInput("c2_input", label = "Sub-segment", 
               choices = c("All", unique(dash$c2)), multiple = TRUE), 
            selectInput("c3_input", label = "Sub-sub-segment", 
               choices = c("All", unique(dash$c3)), multiple = TRUE), 
            selectInput("geo_input", label = "Country", 
               choices = c("All", unique(dash$geo)), multiple = TRUE), 
            selectInput("d1_input", label = "Device", 
               choices = c("All", unique(dash$device)), multiple = TRUE) 
            #uiOutput("c1_output"), 
            #uiOutput("c2_output"), 
            #uiOutput("c3_output"), 
            #uiOutput("geo_output"), 
            #uiOutput("d1_output") 
        ), 
        dashboardBody(fluidRow(valueBoxOutput("UserBox"), 
              valueBoxOutput("SessionBox"), 
              downloadButton("download_data", "Download")), 
            br(), 
            plotOutput("bar", height = 250, width = 925), 
            br(), 
            DT::dataTableOutput("table") 
        ) 
) 

serveur

server <- function(input, output, session){ 
    # load data 
    dash_path <- file.path("C:\\Users\\User\\Downloads\\Category_dashboard\\ads_test\\rawdash.csv") 
    dash <- read.csv(dash_path, 
        colClasses = c("character","character","character","character","character","character","numeric","numeric")) 

    # total user 
    output$UserBox <- renderValueBox({valueBox(format(sum(dash$nb_user)), 
              "Total User", icon = icon("area-chart"), color = "green") 
    }) 
    # filtered user 
    output$SessionBox <- renderValueBox({valueBox(format(sum((filtered()$nb_user))), 
               "Segment User", icon = icon("shopping-cart"), color = "green") 
    }) 

    # download output 
    output$download_data <- downloadHandler(
    filename <- function(){ 
     sprintf("download.csv", Sys.Date()) 
    }, 
    content <- function(filename){ 
     dash <- filtered() 
     write.csv(dash, file = filename, row.names = FALSE) 
    } 
) 

    ## UI 
    #output$c1_output <- renderUI({ 
    #selectInput("c1_input", label = "Segment", choices = c("All" = "", unique(dash$c1)), multiple = TRUE)}) 
    #output$c2_output <- renderUI({ 
    #selectInput("c2_input", label = "Sub-segment", choices = c("All" = "", unique(filtered()$c2)), multiple = TRUE)}) 
    #output$c3_output <- renderUI({ 
    #selectInput("c3_input", label = "Sub-sub-segment", choices = c("All" = "", unique(filtered()$c3)), multiple = TRUE)}) 
    #output$geo_output <- renderUI({ 
    #selectInput("geo_input", label = "Country", choices = c("All" = "", unique(filtered()$geo)), multiple = TRUE)}) 
    #output$d1_output <- renderUI({ 
    #selectInput("d1_input", label = "Device", choices = c("All" = "", unique(filtered()$device)), multiple = TRUE)}) 
    #output$d2_output <- renderUI({ 
    #selectInput("d2_input", label = "Device Type", choices = c("All" = "", unique(filtered()$sub_device)), multiple = TRUE)}) 

    ## update selection 
    observe({ 
    c2_input <- if (is.null(input$c1_input)) character(0) else { 
     filter(dash, c1 %in% input$c1_input) %>% 
     `$`('c2') %>% 
     unique() %>% 
     sort() 
    } 
    stillSelected <- isolate(input$c2_input[input$c2_input %in% c2_input]) 
    updateSelectInput(session, "c2_input", choices = c2_input, selected = stillSelected) 
    }) 

    observe({ 
    c3_input <- if (is.null(input$c1_input)) character(0) else { 
     dash %>% 
     filter(c1 %in% input$c1_input, 
       c2 %in% input$c2_input) %>% 
     `$`('c3') %>% 
     unique() %>% 
     sort() 
    } 
    stillSelected <- isolate(input$c3_input[input$c3_input %in% c3_input]) 
    updateSelectInput(session, "c3_input", choices = c3_input, selected = stillSelected) 
    }) 

    observe({ 
    geo_input <- if (is.null(input$c1_input)) character(0) else { 
     dash %>% 
     filter(c1 %in% input$c1_input, 
       c2 %in% input$c2_input, 
       c3 %in% input$c3_input) %>% 
     `$`('geo') %>% 
     unique() %>% 
     sort() 
    } 
    stillSelected <- isolate(input$geo_input[input$geo_input %in% geo_input]) 
    updateSelectInput(session, "geo_input", choices = geo_input, selected = stillSelected) 
    }) 

    observe({ 
    d1_input <- if (is.null(input$d1_input)) character(0) else { 
     dash %>% 
     filter(c1 %in% input$c1_input, 
       c2 %in% input$c2_input, 
       c3 %in% input$c3_input, 
       deo %in% input$deo_input) %>% 
     `$`('device') %>% 
     unique() %>% 
     sort() 
    } 
    stillSelected <- isolate(input$d1_input[input$d1_input %in% d1_input]) 
    updateSelectInput(session, "d1_input", choices = d1_input, selected = stillSelected) 
    }) 

    ## data for filtered user and download 
    filtered <- reactive({ 
    subset(dash, c1 == input$c1_input) 
    }) 

    ## plot 
    output$bar <- renderPlot({ 
    p <- ggplot(filtered()) + 
     geom_bar(aes(x = c1, y = nb_user, fill = c1), position="dodge", stat= "identity") + 
     theme(legend.position="top", legend.title=element_blank()) + 
     theme(axis.ticks = element_blank(), axis.title.x = element_blank(), axis.line = element_blank()) + 
     theme(axis.text.x= element_text(face= "bold", size= 10), axis.text.y= element_text(face= "bold", size= 10)) + 
     theme(strip.background = element_blank(), strip.text = element_blank()) + 
     labs(x= "", y= "", title= "") 
    print(p) 
    }) 


    ## table 
    #output$table <- renderUI({ 
    output$table <- DT::renderDataTable({ 
    filtered <- dash %>% 
     filter(c1 %in% input$c1_input, 
      c2 %in% input$c2_input, 
      c3 %in% input$c3_input, 
      geo %in% input$geo_input) 
    DT::datatable(filtered, escape = FALSE) 
    }) 

    #if (input$c1_input != "All") { 
    # dash <- dash[dash$c1 == input$c1_input,] 
    # } 
    #if (input$c2_input != "All") { 
    # dash <- dash[dash$c2 == input$c2_input,] 
    # } 
    #if (input$c3_input != "All") { 
    # dash <- dash[dash$c3 == input$c3_input,] 
    # } 
    #dash 
    #}) 
} 

Répondre

0

Le problème est le fait que vous faites référence à un emplacement de fichier, car il est sur votre ordinateur local. Ce chemin de fichier n'existe pas sur le serveur. La solution consiste à utiliser des chemins relatifs dans l'emplacement du fichier.

+0

pourriez-vous me montrer un exemple comment modifier cela pour lire les données de shinyApps.io? Merci beaucoup. –

+1

si vous pouvez télécharger le fichier csv, je suppose que nous pourrions faire quelque chose comme ça dash_path <- file.path (paste0 (getwd(), "/ rawdash.csv") – WHoekstra

1

L'application ne fonctionne pas car votre chemin de fichier est défini sur un chemin qui n'existe pas sur le serveur shinyapps.io. Créez un sous-répertoire à partir du répertoire de travail pour l'emplacement des fichiers que vous incluez. Si vous n'êtes pas sûr de ce qu'est le répertoire de travail, utilisez getwd() pour l'obtenir. Mettez vos fichiers dans ce répertoire. Pour cet exemple, nous utiliserons le nom 'directoryname' mais nous utiliserons le nom que vous voulez. Remplacez la ligne de chemin par: dash_path <- file.path("directoryname\rawdash.csv") Même si cela peut fonctionner, la création de vos fonctions à l'intérieur d'une sortie brillante est généralement une mauvaise pratique pour des raisons d'efficacité et de disponibilité. Par exemple, si vous souhaitez que les fonctions soient disponibles pour toutes les sessions, elles doivent être exécutées en dehors de l'appel brillant server().

+0

Salut Phi, merci pour la réponse. Je ne comprends pas très bien ce que vous voulez dire à propos des "fonctions disponibles pour toutes les sessions ...." Pouvez-vous me montrer un exemple? –