Я пытаюсь использовать Shiny для создания приложения с функцией вывода файла pdf. В частности, я пытаюсь использовать функцию msaPrettyPrint из пакета msa. Он использует функцию texi2pdf из пакета tools для создания файла PDF. Например, если вы запустите следующий код, вы сгенерируете PDF-файл под названием «myFirstAlignment.pdf» с выравниванием аминокислотной последовательности в вашем рабочем каталоге.

# source("http://www.bioconductor.org/biocLite.R")
# biocLite("msa")
library(msa)
mySequenceFile <- system.file("examples", "exampleAA.fasta", package="msa")
mySequences <- readAAStringSet(mySequenceFile)
myFirstAlignment <- msa(mySequences)
msaPrettyPrint(myFirstAlignment, output="pdf", showNames="left",showLogo="top",consensusColor="BlueRed", logoColors="accessible area", askForOverwrite=FALSE)

Мне было интересно, есть ли способ заставить работать следующий код? Я думаю, проблема может быть в том, что на выходе уже есть файл в формате pdf. Я хочу, если возможно, увидеть вывод PDF на экране. Если это невозможно увидеть на экране, где находится PDF-файл и можно ли его скачать?

library(shiny)
runApp(list(
  #Load the exmaple from the msa package.
  mySequenceFile <- system.file("examples", "exampleAA.fasta", package="msa"),
  mySequences <- readAAStringSet(mySequenceFile),
  myFirstAlignment <- msa(mySequences),
  # A simple shiny app.
  # Is it possible to see the generated pdf file on screen?
  ui = fluidPage(plotOutput('plot')),
  server = function(input, output) {
    output$plot <- renderPlot(msaPrettyPrint(myFirstAlignment, output="pdf", showNames="left",showLogo="top",consensusColor="BlueRed", logoColors="accessible area", askForOverwrite=FALSE))
  }
))

Следует упомянуть, что для работы этого кода требуется LaTeX. Для запуска примера вам понадобится LaTeX. Большое спасибо!

0
l0110 5 Сен 2016 в 17:45

3 ответа

Лучший ответ

Большое спасибо за помощь от JackStat и Malanche. Следующее работает для загрузки результата!

library(shiny)
runApp(list(
   #Load the exmaple from the msa package.
   mySequenceFile <- system.file("examples", "exampleAA.fasta", package="msa"),
   mySequences <- readAAStringSet(mySequenceFile),
   myFirstAlignment <- msa(mySequences),
   # A simple shiny app.
   # Is it possible to see the generated pdf file on screen?
   ui = fluidPage(downloadButton('downloadPDF')),
   server = function(input, output) {
       output$downloadPDF = downloadHandler(
       filename = 'myreport.pdf',
       content = function(file) {
            msaPrettyPrint(
                myFirstAlignment
              , file = 'myreport.pdf'
              , output="pdf"
              , showNames="left"
              , showLogo="top"
              , consensusColor="BlueRed"
              , logoColors="accessible area"
              , askForOverwrite=FALSE)
       file.rename("myreport.pdf", file) # move pdf to file for downloading
       },
       contentType = 'application/pdf'
     )
  }
))
1
l0110 7 Сен 2016 в 06:53

У меня возникли проблемы с запуском вашего примера, но это должно сработать

library(shiny)
runApp(list(
  #Load the exmaple from the msa package.
  mySequenceFile <- system.file("examples", "exampleAA.fasta", package="msa"),
  mySequences <- readAAStringSet(mySequenceFile),
  myFirstAlignment <- msa(mySequences),
  # A simple shiny app.
  # Is it possible to see the generated pdf file on screen?
  ui = fluidPage(downloadButton('downloadPDF')),
  server = function(input, output) {

    output$downloadPDF = downloadHandler(
      filename = 'myreport.pdf',

      content = function(file) {
        out = msaPrettyPrint(
              myFirstAlignment
              , file = 'myreport.pdf'
              , output="pdf"
              , showNames="left"
              , showLogo="top"
              , consensusColor="BlueRed"
              , logoColors="accessible area"
              , askForOverwrite=FALSE)
        file.rename(out, file) # move pdf to file for downloading
      },

      contentType = 'application/pdf'
    )

  }
))
1
JackStat 5 Сен 2016 в 17:32

Возможно, вы можете использовать аргумент msaPrettyPrint file для локального хранения PDF-файла, а затем использовать это решение отображение PDF с локального диска в блестящем цвете, чтобы добавить программу просмотра PDF в ваше приложение.

1
Community 23 Май 2017 в 12:32