4

上部に「specialty」という変数を持つ大きなSweaveファイルがあります。このファイルの残りの部分はLatexとRであり、この変数を使用します。

「専門」のさまざまな値をループするにはどうすればよいですか?

2つの可能性は次のとおりです。

  1. ファイルを1つの大きなループにします(そしてLatexパーツをRに変換します)。
  2. Sweaveファイルをコピーするスクリプトを作成し、「specialty」の値を置き換えて、各コピーでSweaveを実行します。

これらのアイデアについてコメントしたり、より良いアイデアを提案したりできますか?

4

4 に答える 4

6

ビール初心者の方に役立つ情報をご紹介します。

(私は今日brewについて学び、それを使って「専門分野」ごとの章を含む本の文書を作成しました。)

シェーンのリンクは役に立ちます。別のリンクはBrewです。これには、ダウンロードと短いリファレンス マニュアル (7 ページ) があります。

少なくとも 1 つの点で、brew は Sweave より優れています。

  • brew では、タグはより単純で、<%...%> のバリエーションです。
  • Sweave では、タグは <<...>>=...@ と \Sexpr{...} です。

brew を試してみたい場合は、R で次のようにします。

install.packages("brew")
library(brew)

次の brew コードを というファイルに保存しますbook.brew。このコードは、章ごとに 1 桁ずつ、数桁の円周率を出力します。ループが 1 つあり、その一部が Latex であり、その一部が brew タグであることに注意してください。

   \documentclass{book}
    \title{A book}
    \begin{document}
    \maketitle
    <%# This comment will not appear in the Latex file. %>
    <%
    digits = c(3, 1, 4, 1, 5, 9)
    for (i in 1:length(digits))
    {
    %>
    \chapter{Digit $<%= i %>$}
    Digit $<%= i %>$ of $\pi$ is $<%= digits[i] %>$.
    <%
    }
    %>
    \end{document}

注: ファイルを保存するときは、最後の行を空白行にしてください。そうしないと、brew が未完成の行に関する警告を表示します。

Rで、次のように入力します

brew("/your/path/to/book.brew", "/where/you/want/brew/to/create/book.tex")

Latex ファイル book.tex をコンパイルします。

于 2010-04-22T21:32:33.000 に答える
5

最後にドキュメントをどのように見せたいかを述べていただけますか? 明らかに、反復構造が含まれています。その場合、Sweave は最適なツールではない可能性があります。代わりに、 のようなものを使用することを検討したい場合がありbrewます。これがどのように機能するかの例については、Learning R ブログのこのブログ投稿を参照してください。

于 2010-04-21T21:14:22.393 に答える
2

2番目のオプションを使用して、これを以前に行ったことがあります。グループ名を反復処理し、それぞれをグループ変数 ( your specialty) に割り当て、Sweave マスター ファイルの名前を変更したコピーを作成し (グループの名前をファイル名に貼り付けて)、その新しいファイルを Sweaveする別の R ファイルを用意しました。 . 「置換」という言葉を使用すると、私は躊躇します-私はいかなる種類の正規表現ソリューションも試しません(そして、それはあなたが意図したものではないかもしれません)。マスター スクリプト ( ) で割り当てるだけでspecialty <- specialties[i]問題ありません。

そのコードは、現在死んでいる自宅の PC に閉じ込められていますが、どこかのフラッシュ ドライブにある可能性があります。これを正しく機能させるのに問題がある場合は、私に知らせてください。

brew私はまだ個人的な経験がないので、Sweave と比較することはできませんが、おそらく検討する価値があるでしょう。

于 2010-04-21T21:25:34.020 に答える
0

Brew を使用せずに Sweave にとどまることができるソリューションがあります。重要なのは、ループに適用されるコードを を使用して Latex マクロに変換し\newcommand、変数をループして各値の Latex マクロへの呼び出しを発行する R チャンクを作成することです。

完全な例はhttps://stat.ethz.ch/pipermail/r-help/2008-June/164783.htmlにありますが、要点は次のとおりです。

\documentclass{article}
\SweaveOpts{echo=FALSE}
\newcommand\digit[2]{%
  \section{Digit #1}
  Digit #1 of $\pi$ is $#2$.
}
\title{Digits of $\pi$}
\begin{document}
\maketitle
<<results=tex>>=
digits = c(3, 1, 4, 1, 5, 9)
for (i in seq(digits)) {
  cat(paste("\\digit{", i, "}{", digits[i], "}\n", sep=""))
}
@ 
\end{document}
于 2011-11-07T18:35:20.357 に答える