Сгенерировать отчет из приложения shiny с помощью markdown: файл не найден

#r #shiny #r-markdown

#r #блестящий #r-markdown

Вопрос:

Я хочу сгенерировать отчет в формате PDF из моего приложения shiny на сервере shiny. Он хорошо работает на моем компьютере. Я пытаюсь подключиться к своему серверу shiny, но когда я хочу сгенерировать отчет, я получаю страницу Firefox «файл не найден» вместо получения PDF.

Я использую код, показанный на:https://shiny.rstudio.com/articles/generating-reports.html Я также пытаюсь напрямую использовать свой файл .Rmd вместо копирования / вставки его во временный каталог, но я получил ту же ошибку.

Мой серверный файл :

 output$pdfGen <- downloadHandler(
    # For PDF output, change this to "report.pdf"
    filename = "rapport_preci.pdf",
    content = function(file) {
      withProgress(message = "Génération du pdf en cours", value = 0,{
        src <- normalizePath('report.Rmd')

        # temporarily switch to the temp dir, in case you do not have write
        # permission to the current working directory
        owd <- setwd(tempdir())
        on.exit(setwd(owd))
        file.copy(src, 'report.Rmd', overwrite = TRUE)

      # Set up parameters to pass to Rmd document
      params <- list(varSite = input$pdfSite,
                     ...
                     varTrans= input$valTrans1
                     )

      # Knit the document, passing in the `params` list, and eval it in a
      # child of the global environment (this isolates the code in the document
      # from the code in this app).
      out <- render("report.Rmd", output_file = file,
                        params = params,
                        encoding = "UTF-8"
      )
      file.rename(out, file)
      })
    }
  )
  

Я думаю, что мое приложение не нашло мой файл .Rmd, но как мне это исправить? Все мои файлы находятся в одной папке.

Ответ №1:

Я просто запускаю часть кода, и, по-видимому, проблема в том, когда вы устанавливаете owd <- setwd(tempdir()) Вот что это делает:

 > tempdir()
[1] "/tmp/RtmpKafhlt"
> owd = setwd(tempdir())
> owd
[1] "/home/med"
  

и у вас, вероятно, нет доступа к домашней директории хост-сервера. Вам нужно установить replace on.exit(setwd(owd)) с on.exit(owd)

Комментарии:

1. или укажите параметры from = , to =

2. @A.Тибо, пожалуйста, ознакомьтесь с измененным ответом.

3. Я пытаюсь « tempReport <- file.path(tempdir(), «report.Rmd») file.copy(«report.Rmd», tempReport, перезаписать = TRUE) « и: « owd <- tempdir () on.exit (owd) file.copy (from = ‘report.Rmd’, to = src, перезаписать = TRUE) « и я все еще получаю ту же ошибку

4. Это то, что вам нужно попробовать: во-первых, tempReport <- file.path(tempdir(), "report.Rmd") и строка file.copy(src, tempReport, overwrite = TRUE)

5. Все та же ошибка… Я также пытаюсь file.copy(from = "report.Rmd", to = tempReport, overwrite = TRUE) вместо file.copy(src, tempReport, overwrite = TRUE) . Похоже, что он не может найти мой файл .Rmd или может скопировать / вставить его…