最近ここに投稿した質問を拡張しています(図をKnitrドキュメントに直接入れます(ファイルをフォルダーに保存せずに))。
データの要約を出力するユーザー向けの .pdf ファイルを生成する R パッケージを作成しています。パッケージに .Rnw スクリプトがあります (ここでは、私の MWE は test.Rnw と呼ばれます)。ユーザーは次のことができます。
1) knit("test.Rnw") to create a test.tex file
2) "pdflatex test.tex" to create the test.pdf summary output file.
.Rnw ファイルは多くの画像を生成します。もともと、これらはすべて現在のディレクトリに保存されていました。これらの画像がディレクトリ (または、.tex ファイルで pdflatex を呼び出したときに作成される .aux ファイルまたは .log ファイル) に保存されているようには見えません (ユーザーはこれらの画像ファイルを忘れずに削除する必要があるため)。 . 第二に、スクリプトが複数回実行されると、この乱雑さが問題を引き起こす可能性があることも心配しています。
そこで、前回の投稿で、画像を一時フォルダーに保存することで .Rnw ファイルを改善しました。新しい R セッションが開かれるたびに、一時フォルダー内のファイルが削除されると言われました。しかし、私はまだ特定のことを心配しています:
1) 19 行目のような行を挿入する必要があると思います。
system(sprintf("%s", paste0("rm -r ", temppath, "/*")))
.Rnw ファイルが実行されるたびに一時フォルダー内のファイルを自動的に削除します (R が再起動されるたびにイメージが削除されるだけではありません)。これにより、現在のディレクトリにイメージがクリーンに保たれ、ユーザーはイメージを手動で削除することを覚えておく必要がなくなります。ただし、この「解決策」が一時フォルダー内のファイルを削除する行を持つ CRAN 標準に合格するかどうかはわかりません。その理由は、ユーザーのシステム内のファイルを削除するためです。これにより、他のプログラムが一時フォルダーにファイルを書き込んでいる場合に問題が発生する可能性があります。明らかな理由で、CRAN がユーザーのコンピューターからのファイルの書き込み/削除を許可しないことについて読んだ気がします。CRAN はそのような慣行についてどの程度厳格でしょうか? それについて安全な方法はありますか?
2) 一時ファイルへの画像ファイルの書き込みと削除がうまくいかない場合、同じ効果を達成する別の方法は何ですか (フォルダーに面倒な画像ファイルを作成せずにスクリプトを実行します)? 代わりに、画像を出力ファイルに直接埋め込むことは可能ですか (ディレクトリに保存する必要はありません)? これは不可能だと確信しています。ただし、.Rmd を使用して変換することは可能であり、.Rnw を .Rmd に変換できると言われました。.Rnw ファイルは、正しい出力のために特定の形式 (テキストと余白) に従う必要があり、非常に長いため、これは難しい場合があります。.Rnw ファイル全体を書き直さずに、画像を生成するチャンクのみに .Rmd 機能 (画像を出力に直接挿入する機能) を利用することは可能ですか?
以下は私のMWEです:
\documentclass[nohyper]{tufte-handout}
\usepackage{tabularx}
\usepackage{longtable}
\setcaptionfont{% changes caption font characteristics
\normalfont\footnotesize
\color{black}% <-- set color here
}
\begin{document}
<<setup, echo=FALSE>>=
library(knitr)
library(xtable)
library(ggplot2)
# Specify directory for figure output in a temporary directory
temppath <- tempdir()
# Erase all files in this temp directory first?
#system(sprintf("%s", paste0("rm -r ", temppath, "/*")))
opts_chunk$set(fig.path = temppath)
@
<<diamondData, echo=FALSE, fig.env = "marginfigure", out.width="0.95\\linewidth", fig.cap = "The diamond dataset has varibles depth and price.",fig.lp="mar:">>=
print(qplot(depth,price,data=diamonds))
@
<<echo=FALSE,results='asis'>>=
myDF <- data.frame(a = rnorm(1:10), b = letters[1:10])
print(xtable(myDF, caption= 'This data frame shows ten random variables from the distribution and a corresponding letter', label='tab:dataFrame'), floating = FALSE, tabular.environment = "longtable", include.rownames=FALSE)
@
Figure \ref{mar:diamondData} shows the diamonds data set, with the
variables price and depth.Table \ref{tab:dataFrame} shows letters a through j
corresponding to a random variable from a normal distribution.
\end{document}