裏 RjpWiki

文字通り,RjpWiki の裏を行きます
R プログラム コンピュータ・サイエンス 統計学

Sweave-3

2011年09月30日 | RとLaTeX

図をフロートにするのは以下のようにする。

<<foo, include=false>>=
図を描く
@

\begin{figure}
    \begin{center}
<<fig=true, echo=false>>=
<<foo>>
@
    \end{center}
    \caption{bar baz}
    \label{boo}
\end{figure}

当然のことだが,図を描くコードを示す必要がないなら以下でよい。

\begin{figure}
    \begin{center}
<<fig=true, echo=false>>=
図を描く
@
    \end{center}
    \caption{bar baz}
    \label{boo}
\end{figure}

 

コメント

Sweave-2

2011年09月29日 | RとLaTeX

ラッパー関数を作った

2011/910/13 版
texi2pdf にならい,Rerun to get ... が出なくなるまで複数回タイプセットを繰り返すようにした

ms <- function(file, encoding="euc-jp")
{
    read.lines <- function(file, encoding)
    {
        con <- file(file, open="r", encoding=encoding)
        x <- readLines(con)
        close(con)
        return(x)       
    }
    Sweave(file, encoding=encoding)
    file <- sub(".(R|S)nw", ".tex", file)
    x <- read.lines(file, encoding=encoding)
    bb <- sum(grepl("mediabb", x))
    con <- file(file, open="w", encoding=encoding)
    sapply(x, function(y) {
        if (bb == 0 && grepl("begin{document}", y, fixed=TRUE)) {
            cat("\\usepackage{mediabb}\n", file=con, append=TRUE)
        }
        if (grepl("includegraphics", y) && !grepl("(.jpg|.JPG|.png|.PNG)", y)) {
            y <- sub("}", ".pdf}\n", y)
        }
        cat(sprintf("%s\n", y), file=con, append=TRUE)
    })
    close(con)
    repeat {
        system(sprintf("/Applications/UpTeX.app/teTeX/bin/platex -kanji=euc %s", file))
        log <- read.lines(sub(".tex", ".log", file), encoding)
        if (sum(grepl("Rerun to get", log)) == 0) break
    }
    system(sprintf("/Applications/UpTeX.app/teTeX/bin/dvipdfmx %s", sub(".tex", ".dvi", file)))
}

旧版

ms <- function(file, encoding="euc-jp")
{
    Sweave(file, encoding=encoding)
    file <- sub(".(R|S)nw", ".tex", file)
    con <- file(file, open="r", encoding="euc-jp")
    x <- readLines(con)
    close(con)
    bb <- sum(grepl("mediabb", x))
    con <- file(file, open="w", encoding="euc-jp")
    sapply(x, function(y) {
        if (bb == 0 && grepl("begin{document}", y, fixed=TRUE)) {
            cat("\\usepackage{mediabb}\n", file=con, append=TRUE)
        }
        if (grepl("includegraphics", y)) {
            y <- sub("}", ".pdf}\n", y)
        }
        cat(sprintf("%s\n", y), file=con, append=TRUE)
    })
    close(con)
}
ms("sweave.Snw")

コメント

Sweave

2011年09月29日 | RとLaTeX

1. Sweave で作成される tex 内で,\includegraphics{ } で指定される画像ファイルの指定には,拡張子がつかない。
\usepackage[dvipdfm]{graphicx} を使うと,自動的に .pdf が補われるということだけど,補われない。

\usepackage{ctable} があるとこのようになるようだ。

2. バウンディング・ボックスを ebb で用意しなくても,\usepackage{mediabb} を使えばよい。

3. コメントを残すためには,\SweaveOpts{keep.source=TRUE} を使う。

コメント

data.frame が入れ子になる

2011年09月13日 | ブログラミング

データフレームに新しい列を追加するとき,既存のデータフレームの列をデータフレームとして引用すると,その列自体がデータフレームになり,後々の操作が面倒になる。

> a <- data.frame(x=1:10, y=rnorm(10))
> a$z <- a[1]+a[2]
> class(a)
[1] "data.frame"
> class(a$x)
[1] "integer"
> class(a$y)
[1] "numeric"
> class(a$z) # ここに注意!!
[1] "data.frame"
> dput(a)
structure(list(x = 1:10, y = c(0.187051146554012, 0.227542728568814,
-1.26190046286905, 0.285589580242562, 1.7492473631418, -0.164090004134803,
-0.162926710698454, 1.39857200633747, 0.898396240682948, -1.64849481838129
), z = structure(list(x = c(1.18705114655401, 2.22754272856881,
1.73809953713095, 4.28558958024256, 6.7492473631418, 5.8359099958652,
6.83707328930155, 9.39857200633747, 9.89839624068295, 8.35150518161871
)), .Names = "x", row.names = c(NA, -10L), class = "data.frame")), .Names = c("x",
"y", "z"), row.names = c(NA, -10L), class = "data.frame")

コメント