2016-09-05 5 views
0

Shinyを使用して、pdfファイルを出力する関数でアプリケーションを構築しようとしています。具体的には、私が使用しようとしている機能は、msaパッケージのmsaPrettyPrint機能です。 toolsパッケージのtexi2pdf関数を使用してpdfファイルを生成します。 たとえば、次のコードを実行すると、作業ディレクトリにアミノ酸配列アラインメントを持つ "myFirstAlignment.pdf"というpdfが生成されます。Shinyは、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が必要です。 ありがとう!

答えて

1

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

私はあなたの例を実行している問題を抱えていたが、これは

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' 
    ) 

    } 
)) 
+0

動作しません。コードを実行してダウンロードボタンを押すと、ダウンロードボタン付きの新しいウィンドウが表示されました。ダウンロードボタンをもう一度押すと、ダウンロードボタンがポップアップした別の新しいウィンドウが表示されます。言いたいことは、このコードではLaTeXが動作する必要があることです。例を実行するにはLaTeXが必要です。試してくれてありがとう! – l0110

+0

それを近づけた編集内容を追加しましたが、なんとなく不足しているものがありました – JackStat

1

たぶん、あなたはローカルでPDFファイルを保存するためにmsaPrettyPrintfile引数を使用して、アプリケーション内のPDFビューアを置くために、このソリューションdisplaying a pdf from a local drive in shinyを使用することができますが動作するはずです。

+0

Malancheこんにちは、それが生成された後のファイルの場所を確認する方法ですか?ご協力いただきありがとうございます! – l0110

+0

はい、あります。デフォルトでは、相対パスで保存されたファイルは、ui.Rとserver.Rがあるフォルダと同じフォルダに保存されます。例えば、save(myVariable、file = "myData.RData") 'と次に' datapath < - paste(getwd()、 "myData.RData"、sep = "/"というRData環境を作成するために 'save'関数を使用すると、 ")'。 あなたは 'save'の代わりに' msaPrettyPrint'を使い、myData.RDataの代わりにあなたのpdfファイルの適切な名前を渡します。 PS:これらの編集すべてで申し訳ありません、私はちょうどミニマイクフォームを認めているコメントに気づいた。 – Malanche

+0

ありがとう、Malanche。すぐあなたの方法を試してみます。 – l0110

関連する問題