20

タスクは、R の出力 (例: 出力を作成したコードではない) をその形式 (テキストと画像を含む) にキャプチャするファイル (word、rtf、pdf、html など) を作成することです。

これを行う方法は、元の R スクリプトへの変更をできるだけ少なくする必要があります。

テキストや画像だけに関心があれば、?sink または ?pdf を使用します。しかし、簡単な方法で 2 つを 1 つの出力に結合する方法がわかりません。

r2wd を使用して R 出力をエクスポートする方法があることは知っていますが、私の好みでは、元のコードにあまりにも多くのメダリングが含まれています (経験はありませんが、sweave ソリューションにも同じことが当てはまると思います)。

以下は、将来の例のためのサンプル コードです。

START.text.and.image.recording("output.file") # this is the function I am looking for
x <- rnorm(100)
y <- jitter(x)
print(summary(x))
print(head(data.frame(x,y)))
cor(x,y)
plot(x,y)
print(summary(lm(y~x)))
STOP.text.and.image.recording("output.file") # this is the function I am looking for

更新: Sweave ではなく、ReproducibleResearch タスク ビューの他のオプションを求められました。

理由は次のとおりです。

  1. 私は(まだ)LaTeXを知りません
  2. LaTeXを知っていても、すべての出力をまとめて順番に単純にダンプするための単純なデフォルトを備えたものが必要です。「単に」とは、余分なコード/ファイル管理のオーバーヘッドをできるだけ少なくすることを意味します。

sweave や brew のようなものがよりスケーラブルであることは理解していますが、小規模なプロジェクト/スクリプト向けのより「シンプルな」ソリューションがあるかどうかを確認しています。

4

11 に答える 11

15

2012年現在、knitrこの問題に対する完璧な解決策を提供しています。

たとえば、拡張子が rmd のファイルを作成します。次のように、コードをいくつかのコマンドでラップします。

```{r}
x <- rnorm(100)
y <- jitter(x)
print(summary(x))
print(head(data.frame(x,y)))
cor(x,y)
plot(x,y)
print(summary(lm(y~x)))
```

いくつかの方法で、それを自己完結型の HTML ファイルに変換できます。RStudio では、ボタンを 1 つ押すだけKnit HTMLです。これは生成された HTML ファイルです。HTML がブラウザーでどのように表示されるかを実際に確認するには、ファイルを保存して開きます。

画像コードと出力は、ご想像のとおり織り交ぜられています。

もちろん、ファイルを複数の R コード チャンクに分割することができます。しかし、要点は、そうする必要はないということです。

私が作成した別の例を次に示します。

于 2012-05-21T07:59:32.477 に答える
5

LaTeX を知っている場合は、おそらく sweave が最善の策です。odfWeave は同様のメカニズムですが、コードを OpenOffice.org ファイルに埋め込むためのものです。HTML には R2html パッケージがあります。ただし、システムを最大限に活用するには、コードを少し分割する必要があります。あるいは、sweave/odfweave/html テンプレートは、print()必要な場所に配置された出力表示 (ステートメント) を使用して、スクリプトのデータ生成の側面を単一のコード チャンクでソース化することもできます。スクリプト内でグラフィックを呼び出して、別のファイルとしてドキュメントに埋め込む図を生成し、それを手動でテンプレートに含めることもできます。

たとえば (これを実行するための完全な.Rnwファイルではありませんsweave)、sweave ファイルでは、分析を実行して R オブジェクトを生成する R スクリプトの主要部分をソースとするテンプレートの上位にこのようなものを配置します。 :

<<run_script, eval=TRUE, echo=FALSE, results=hide>>=
source("my_script.R")
@

次に、印刷出力が必要な場所にコード チャンクを挿入する必要があります。

<<disp_output, eval=TRUE, echo=FALSE, results=verbatim>>=
## The results=verbatim is redundant as it is the default, as is eval=TRUE
print(summary(x)) ## etc
@

次に、図を挿入するためのチャンクが必要になります。

出力 (印刷物や図) から分析コードを分離することも、特に分析コードの計算コストが高い場合は、おそらく良い方法です。必要に応じて出力/表示コードを更新しながら、一度実行するか、キャッシュすることもできます。

スウィーブ ファイルの例

csgillespie のサンプル スウィーブ ファイルを使用して、次のように設定します。まず、my_script.Rコア分析コードを含むファイル:

x <- rnorm(100)
y <- jitter(x)
corXY <- cor(x,y)
mod.lm <- lm(y~x)

次に、Sweave ファイル

\documentclass[12pt]{article}
\usepackage{Sweave}
\begin{document}

An introduction
<<run_analysis, eval=TRUE,echo=FALSE, results=hide>>=
source("my_script.R")
@

% Later
Here are the results of the analysis
<<show_printed_output, echo=FALSE>>=
summary(x))
head(data.frame(x,y))
@

The correlation between \texttt{x} and \texttt{y} is:
<<print_cor, echo=FALSE>>=
corXY
@

Now a plot
\begin{figure}[h]
    \centering
<<echo=FALSE, eval=TRUE, fig=TRUE, width=6, height=4>>=
plot(x,y)
@ 
\caption{\textit{A nice plot.}}
\end{figure}

\end{document}

あなたが望んでいるように見えるものは存在しません。R コードと出力をドキュメント ファイルに結合する簡単な方法。それは、スウィーブとその同類の単純さを考慮しない場合です。何をしたいのか、または分析とグラフィックスと出力コードをどのように配置するかを再考する必要があるかもしれませんが、提案されたオプション (sweave、odfweave、brew、R2html) のいずれかを検討するのが最善の方法です。

HTH

于 2010-09-28T22:26:08.440 に答える
5

Sweave を使用することをお勧めしますが、見栄えがよくない初歩的な機能は で実現できますsink()

通常の txt ファイル:

sink(file = "test.txt", type = "output")
summary(cars)
sink()

またはいくつかの HTML タグを追加します。

sink(file = "tal_test.html", type = "output")
cat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"", "\n")
cat("\"http://www.w3.org/TR/html4/strict.dtd\">", "\n")
        cat("<HTML>", "\n")
        cat("<HEAD>", "\n")
        cat("<TITLE>My first HTML document</TITLE>", "\n")
        cat("</HEAD>", "\n")
        cat("<BODY>", "\n")
        summary(cars)
        cat("</BODY>", "\n")
        cat("</HTML>", "\n")
sink()
于 2010-09-29T06:59:17.377 に答える
4

これを行う Roux というスクリプトを約 1 年前に書きました。スクリプトを変更せずに、R スクリプトを実行して、画像を含む HTML トランスクリプトを作成できるようにしたいと考えていました。

次のように、コマンド ラインから Roux を呼び出します。 roux example.R

そしてルーは:

  • R でスクリプトを実行します (最初に Roux パッケージが自動的に必要になります)。
  • 構文は、Pygments を使用して .Rout 出力を強調表示します
  • 画像を正しい位置に挿入する

Roux R パッケージは非常に小さな R パッケージで、デフォルトのインタラクティブ グラフィックス デバイスではなく、ランダムなファイル名に自動的に書き込むように plot() およびその他の関数を変更します。

私はこれを多く使用しており、私にとっては非常にうまく機能しますが、より多くの人が新しいパッケージでそれを使用すると、小さな問題が発生する可能性が最も高いと確信しています. PNGデバイスを開く必要があることを認識しません。

これについてTalと話し合ってから、コードを更新および改善しました。

そのため、問題が発生した場合は、Bitbucket のイシュー トラッカーに報告してください。

LaTeX トランスクリプトのサポートを追加したので、画像を含む R スクリプトのトランスクリプトを含む PDF を簡単に作成できます。(example-output ディレクトリを見ると、例を見ることができます。「raw」リンクを見つけてダウンロードしてください。)

Python と Pygments Python ライブラリがインストールされている必要があります。古いバージョンの Python を使用していて問題が発生した場合は、お知らせください。

Roux についてブログに書きましたが、Sweave の代替となる Dexy と呼ばれる新しいプロジェクトに力を注いでいたため、あまり公表しませんでした。より高い柔軟性と制御が必要な場合、または読みやすいドキュメントに興味がある場合は、Dexy もチェックしてみてください。

于 2010-10-04T21:48:25.543 に答える
2

質問でスウィーブについて言及しましたが、それが適切でない理由は実際にはありません。あなたの質問は Sweave にぴったりのようです。実際、あなたのコード例は、2 番目の Sweave のから得たものである可能性があります。

Sweave ファイルの例

Latex を知っていれば、Sweave はそれほど難しくありません。Sweave ファイルとしてのサンプル ファイルは次のとおりです。

\documentclass[12pt,BCOR3mm,DIV16]{scrreprt}
\usepackage{Sweave}
\begin{document}

An introduction
<<eval=TRUE,echo=TRUE>>=
x <- rnorm(100)
y <- jitter(x)
print(summary(x))
print(head(data.frame(x,y)))
cor(x,y)
@ 
Now a plot
\setkeys{Gin}{width=0.5\textwidth}
\begin{figure}[h]
    \centering
<<echo=FALSE, eval=TRUE, fig=TRUE, width=6, height=4>>=
plot(x,y)
@ 
\caption{\textit{A nice plot.}}
\end{figure}

\end{document}

Linux では、ファイルを tmp.Rnw として保存するだけです。それで

R CMD Sweave tmp.Rnw
pdflatex tmp.tex
于 2010-09-28T21:39:45.397 に答える
2

Sweave インターフェイスを持つ LyX もあります。R / LyX / Sweave インターフェイス コードは CRAN のhttp://cran.fhcrc.org/contrib/extra/lyx/にあります。LyX 自体は、ほとんどの Linux ディストリビューションに含まれています。この魔法はすべて Windows 上で動作するように作成できますが、決して簡単ではありません。Windows では、読み書きのできる R プログラミングには、Blue Reference の Inference for R をお勧めします。

于 2010-09-29T05:58:13.493 に答える
2

そうですね、簡単な報告や Web ページの編集にAsciidocを使用していたことを思い出してください。現在、R プラグイン( CRAN ではascii ) があり、R コードを asciidoc ドキュメントに埋め込むことができます。構文は Markdown や Textile と非常に似ているため、すぐに習得できます。

出力は (X)HTML、Docbook、LaTeX、そしてもちろん最後の 2 つのバックエンドの 1 つを介した PDF です。

残念ながら、すべてのコードを 1 つのステートメントにまとめることはできないと思います。ただし、多数の R オブジェクトをサポートしています。以下を参照してください。

> methods(ascii)
 [1] ascii.anova*              ascii.aov*                ascii.aovlist*            ascii.cast_df*           
 [5] ascii.character*          ascii.coxph*              ascii.CrossTable*         ascii.data.frame*        
 [9] ascii.default*            ascii.density*            ascii.describe*           ascii.describe.single*   
[13] ascii.factor*             ascii.freqtable*          ascii.ftable*             ascii.glm*               
[17] ascii.htest*              ascii.integer*            ascii.list*               ascii.lm*                
[21] ascii.matrix*             ascii.meanscomp*          ascii.numeric*            ascii.packageDescription*
[25] ascii.prcomp*             ascii.sessionInfo*        ascii.simple.list*        ascii.smooth.spline*     
[29] ascii.summary.aov*        ascii.summary.aovlist*    ascii.summary.glm*        ascii.summary.lm*        
[33] ascii.summary.prcomp*     ascii.summary.survfit*    ascii.summary.table*      ascii.survdiff*          
[37] ascii.survfit*            ascii.table*              ascii.ts*                 ascii.zoo*               

   Non-visible functions are asterisked
于 2010-09-29T07:18:00.323 に答える
2

これはロムノフの答えに照らしてですが、それでもです。出力を何らかの HTML フォーマットでラップし、出力を HTML ファイルに埋め込む独自の印刷を作成するだけです。たとえばR パッケージの関数を使用して、データ URI スキームの画像でも同じことができます。imgbase64

于 2010-09-29T11:23:44.320 に答える
2

パッケージを使用して、セッションを html に出力できます。パッケージには、拡張テキストおよび単語 ( 経由) に出力するためR2HTMLの同様の関数がいくつかありTeachingDemosます (「 」を参照)。グラフィック以外のコマンドはファイルに自動的に含まれ、現在のプロットは 1 つのコマンドで挿入できます。txtStartR2wd

于 2012-05-21T20:52:05.793 に答える
1

Twitter の驚異を通じて、誰かが連絡を取り、「roux」と呼ばれるパッケージに関するこのページへのリンクを送ってくれました。それは 1 年前に作成されましたが、私はそれについて聞いたことがありません (どうやらほとんどの人も聞いたことがないようです)。

このパッケージは、私の質問で探していたものとまったく同じように見えますが、インストールは簡単ではないようです。

私はこのソリューションを試してみたいと思っています。また、他の R メンバーがこのプロジェクトに参加して R をより強化する可能性があるかどうかも確認したいと考えています。

于 2010-10-02T08:22:18.313 に答える
0

Lyx を試すという @znmeb の良い提案 - LaTeX のより単語のようなフロント エンドであり、ドキュメンテーションが指摘するように、R ニュースのこの版の2 ページに Sweave での使用に関する良い記事があります。

これは、 lyx sweave リポジトリのガイドラインに従って、Ubuntu 10.04 で行った方法です。

sudo apt-get install lyx
cd ~./lyx
wget http://cran.fhcrc.org/contrib/extra/lyx/preferences
CD レイアウト
wget http://cran.fhcrc.org/contrib/extra/lyx/literate*
wget http://cran.fhcrc.org/contrib/extra/lyx/literate-article.layout
wget http://cran.fhcrc.org/contrib/extra/lyx/literate-book.layout
wget http://cran.fhcrc.org/contrib/extra/lyx/literate-report.layout
wget http://cran.fhcrc.org/contrib/extra/lyx/literate-scrap.inc
cd ~/texmf/tex
wget http://www.biostat.jhsph.edu/~rpeng/ENAR2009/Sweave.sty
  1. Lyx を起動
  2. 設定 -> 再構成
  3. Lyx を再起動します
  4. ファイル -> 新規
  5. ドキュメント -> 設定 -> ドキュメント クラス -> 記事 (Sweave noweb)

便利なリンク:

于 2010-09-29T18:00:10.670 に答える