2016-12-05 1 views
0

私は、グラフを編集してpdfに結果をダウンロードすることを可能にするインタラクティブな光沢のビットを持つHTML Rマークダウン文書を書こうとしています。しかし、HTMLを開始するとすぐに元のマークダウンファイルをpdfの内容で上書きしてしまうので、エディタで完全に愚かなものになってしまいます。光沢のあるインタラクティブなドキュメントのダウンロードボタンは、オリジナルのRマークダウンを上書きします

私はRで失敗する全く新しい方法を見つけたとは思えませんが、他の誰かがこの問題を抱えている場所を見つけることができませんでした。さらに、私は光沢のある参考資料を見てきました。この時点でサークルに入っていますので、どんな助けでも大歓迎です。

私はRstudio 1.0.44、rmarkdown 1.2、およびshiny 0.14.2を使用しています。小さな(ない)作業例:

--- 
title: "Minimum Failing Example" 
author: "wittyalias" 
date: "December 5, 2016" 
output: html_document 
runtime: shiny 
--- 

```{r echo = FALSE} 
library(ggplot2) 

today <- Sys.Date() 

inputPanel(downloadButton("dnld", label = "Download pdf")) 

renderPlot({ 
    # Example code from http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/ 
    p1 <<- ggplot(ChickWeight, aes(x=Time, y=weight, colour=Diet, group=Chick)) + 
    geom_line() + 
    ggtitle("Growth curve for individual chicks") 
    p1 
}) 

reactive({ 
    fname <- paste0("Chick Weight - ", today, ".pdf") 

    output$dnld <- downloadHandler(filename = fname, 
        content = makethepdf(file)) 

    makethepdf <- function(fname) { 
     pdf(fname, 
      width = 14, 
      height = 8.5) 
     p1 
     dev.off() 
} 
}) 
``` 

EDITは:明確にするために:私は、ユーザーが別の書式を持っていますそれらのいくつかのグラフ、複数のページをダウンロードできるようにしたいです。ユーザーは、マークダウン文書のPDF版のみをダウンロードすることはありません。

答えて

0

申し訳ありませんが、私のコードにはいくつかの問題がありますが、私はそれを解決することができました。

この小さな文書での主な問題は、downloadHandler contentが関数ですが、私のコードでは、私は、関数呼び出しの結果に等しいcontentを設定することです。光るアプリが初めて実行されたときのように、contentは関数だと思っていますが、実際には関数を呼び出すようになります。それは基本関数として以外には存在しないような、引数としてfileを送信します。 makethepdffileと呼ぶと、コンソールで使用するとエラーが表示されますが、このアプリケーションの何らかの理由で、(OganMと同様に)file = [name of the .Rmd]と呼ぶだけです。

この変更、修正するには:明確にするため

output$dnld <- downloadHandler(filename = fname, 
       content = makethepdf) 

output$dnld <- downloadHandler(filename = fname, 
       content = makethepdf(file)) 

を:このコードは上書きされることはありません。contentmakethepdfで、file以外の引数を指定した場合、Rmdファイル。たとえば、content = makethepdf(fnm))は、ダウンロードボタンにobject not foundエラーを表示させ、content = makethepdf(fname))は、ダウンロードボタンが押されたときにattempt to apply non-functionエラーをスローするようにします。

0

これは、makethepdfがfile = [name of the file]で実行されていることを特定できない理由が原因で発生します。参照するにはprint(fname)を挿入します。ダウンロードハンドラはオブザーバの内部にあるはずです。あなたはそれを単独で外に持っていなければなりません。何らかの理由でpdf()dev.off()の組み合わせが動作しないようにしたので、以下の作業版があります。

output$dnld = downloadHandler(filename = paste0("Chick Weight - ", today, ".pdf"), 
          content = function(file){ 
           ggsave(file, plot = p1, width = 14, height = 8.5) 
          }) 
+0

この提案には大変感謝していますが、私はpdfで複数のページを作成する必要があります。私が知る限り、ggsaveはそれを許可しません。また、makethepdf関数の外部と内部の両方に 'print(fname)'を挿入し、私が期待していた "Chick Weight .... pdf"を返します。 – wittyalias

0

使用tempfile()tempdir()一時ファイルを作成します

output$downloadReport = downloadHandler(

    filename = function() { 
     normalizePath(tempfile("report_", fileext = ".docx"), winslash = "/") 
    }, 

    content = function(file) { 

    out = rmarkdown::render("./report.Rmd", 
          output_file = file, 
          output_dir = tempdir(), 
          output_format = "pdf_document", 
          intermediates_dir = tempdir(), 
          envir = new.env(), 
          params = list(fontSize = 10) 
) 
}) 

をレイアウトし、テキストは通常​​、どのような作品に類似であるが、同一ではないので、私は通常私のダウンロードしたレポートに対して個別の.Rmdテンプレートを使用アプリで

また、私のアプリからレポートに入力設定を渡すのに便利な方法は、パラメータを使うことです。詳細については、this RStudio postを参照してください。

+0

それは良い考えです、私はそれができることを認識していませんでした。私は明日それを使って調べるだろうが、私はそれがうまくいくかどうかはわからない。完全なマークダウンレポートではなく、グラフのみを含めることができます。それは可能ですか? – wittyalias

関連する問題