8

x現在のセッションにオブジェクトがあるとします。

x <- 1

このオブジェクトを明示的に割り当てることなく、Sweave ドキュメントまたは Knitr ドキュメントで使用するにはどうすればよいですか。

\documentclass{article}
\begin{document}
<<>>=
  print(x)
@
\end{document}

私が質問している理由は、データをインポートし、Sweave テンプレートを使用して各被験者のレポートを作成する R スクリプトを作成したいからです。

4

4 に答える 4

20

reproducibilityグローバル変数を使用すると分析の時間が短縮されるため、これには少し異なるアプローチをとります。brew+を使用sweave/knitrしてこれを実現します。簡単な例を次に示します。

# brew template: "template.brew"
\documentclass{article}
\begin{document}
<<>>=
print(<%= x %>)
@
\end{document}

# function to write report
write_report <- function(x){
  rnw_file <- sprintf('file_%s.rnw', x)
  brew::brew('template.brew', rnw_file)
  Sweave(rnw_file)
  tex_file <- sprintf('file_%s.tex', x) 
  tools::texi2pdf(tex_file, clean = TRUE, quiet = TRUE)
}

# produce reports
dat <- 1:10
plyr::l_ply(dat, function(x) write_report(x))
于 2011-12-08T21:15:30.973 に答える
7

私はそれがうまくいくと思います。Sweaveファイルの名前が「temp.Rnw」の場合は、

> x <- 5
> Sweave("temp.Rnw")

各レポートが上書きされないように、結果の出力に適切な名前を付けることを心配する必要があります。

于 2011-12-08T16:42:44.387 に答える
6

Sweave とR コード チャンクを評価するときにknitrグローバル環境 (「参考文献」を参照globalenv()) を利用するため、グローバル環境にあるものをドキュメントに使用できます。(厳密には、ほとんどの場合でknitrある親フレームを使用します)parent.frame()globalenv()

于 2011-12-08T20:39:26.917 に答える
0

私が過去に使用した別のオプションは、Sweave コードでファイルを開くことです。

私のRセッションで

write.csv(x, "tabletoberead.csv")

私のスウィーブ文書で

<<label=label, echo=FALSE>>= 
datatobeused<-read.csv("tabletoberead.csv")
...more manipulations on data ....
@ 

明らかに、ファイルが見つからない場合に停止するコードを含める必要があります。

于 2011-12-10T21:08:13.803 に答える