Ошибка загрузки в приложении basi c блестящий на портале shinyapps.io - PullRequest
0 голосов
/ 09 февраля 2020

Очень простое блестящее приложение с функцией загрузки работает локально, но не на shinyapps.io

Код:

ui <- shiny::fluidPage(
  fileInput("file", "Upload file")
)
server <- function(input, output){

}
shinyApp(ui, server)

Возникшая ошибка выглядит следующим образом:

enter image description here

Ссылка на приложение shinyapps.io: https://babai.shinyapps.io/stackO/

Файл для проверки при загрузке: http://www.mediafire.com/file/lh98smuid1mprxj/2018-05-20_02-00-10.mat/file

видели следующий похожий вопрос ( Ошибка при развертывании блестящего приложения, которое использует fileInput для загрузки данных ). Но решения здесь не работают.

1 Ответ

0 голосов
/ 14 февраля 2020

Похоже, что проблема вызвана заданной кодировкой c, которую shinyapps.io не распознает. Функция fileInput() пытается сразу прочитать содержимое файла, чтобы обернуть его в data.frame с предопределенной структурой, и завершается неудачно, когда предоставляется неизвестная кодировка или поврежденный файл. С другой стороны, shinyapps.io имеет ограниченные возможности для настройки среды и кодирования.

Итак, вместо этого я бы предложил альтернативный способ чтения файлов с функцией readLines(). В приведенном ниже примере пользователь должен предоставить URL, который затем читается в реактивную переменную. Переменная затем может быть проанализирована или обработана. Тестовый URL из вашего примера не вызывает ошибок.

library(shiny)

ui <- shiny::fluidPage(
  fileInput("file", "Upload file"),              # FileInput (1)
  textOutput("content1"),                        # Text fragment (1)
  textInput("url", label = "Provide URL"),       # URL input (2)
  actionButton("download", label = "Read file"),
  textOutput("content2")                         # Text fragment (2)
)

server <- function(input, output) {
  reactive_val <- reactiveValues()

  # File content
  output$content1 <- renderText({
    if (is.null(input$file)) return(NULL)
    x <- readLines(input$file$datapath, n = 5, skipNul =T)
    enc2native(x)
  })

  # Read URL content
  observeEvent(input$download, {
    my_file <- input$url
    if (is.null(my_file)) return(NULL)
    file_content <- readLines(my_file, n = 5, skipNul =T)
    reactive_val[["content"]] <- enc2native(file_content)
  }, ignoreInit = T)

  # URL file content
  output$content2 <- renderText({
    if (is.null(reactive_val[["content"]])) return(NULL)
    reactive_val[["content"]]
  })
}
shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...