裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Sweave-8

2011年10月13日 | RとLaTeX

fig=TRUE を使うとき,悪さをする ctable.sty を使わないことを前提として,余計な処理をしないラッパー関数。エンコーディングも euc-jp であると決める。

ms <- function(file)
{
    Sweave(file, encoding="euc-jp")
    file <- sub(".(R|S)nw", ".tex", file)
    repeat {
        system(sprintf("/Applications/UpTeX.app/teTeX/bin/platex -kanji=euc %s", file))
        con <- file(sub(".tex", ".log", file), open="r", encoding="euc-jp")
        log <- readLines(con)
        close(con)
        if (sum(grepl("Rerun to get", log)) == 0) break
    }
    system(sprintf("/Applications/UpTeX.app/teTeX/bin/dvipdfmx %s", sub(".tex", ".dvi", file)))
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sweave-7

2011年10月12日 | RとLaTeX

<<>>= の中に書けるもの

engine  文字列(R)  engine=R か engine=S のコードチャンクのみ処理される。
echo
  論理値(TRUE)  R/S コードを出力ファイルに含めるかどうか。
keep.source
  論理値(FALSE)  R/S コードがエコーされるとき,TRUE ならば書いたままのコードがコピーされ,FALSE ならば deparse されたコード(演算子の前後などに適切に空白を入れたコード)がエコーされる。
eval
  論理値(TRUE)  コードチャンクを評価するかどうか。評価しないと言うことは結果も図も作成されないと言うこと。
results
  文字列(verbatim)  verbatim なら R/S 関数の出力は \verbatim 環境に似た環境の下に出力される。tex なら LaTeX の文法に従うものとしてそのまま取り込まれる。hide なら実行はされるがすべての出力は抑制される。
print
  論理値(FALSE)  TRUE の場合はすべての式は print 関数でラップされてから評価される。このようにすれば,全ての式の結果は見えるようになるからだ。
term
  論理値(TRUE)  TRUE の場合は,値の見え方が通常の対話 R セッションと同じになる。すなわち,代入の結果は表示されず,オブジェクト名の場合は値が表示される。false の場合には明示的に print 関数や cat 関数を使わない限り表示されない。
split
  論理値(FALSE)  TRUE の場合は,それぞれのコードチャンクのテキスト出力は別々のファイルに書き込まれる。
strip.white  論理値(FALSE)  TRUE の場合は出力の前と後の空白行が取り除かれる。all の場合は,全ての空白行が取り除かれる。
prefix
  論理値(TRUE)  生成される画像とテキスト出力のファイル名が共通になる。
prefix.string
  文字列  ファイル名のデフォルトは '*.(Rnw|Snw)' の拡張子を除いた部分。
include
  論理値(TRUE)  テキスト出力の \input,グラフ出力の \includegraphics を自動生成するかどうか。別の場所に自分で挿入したいような場合には include=FALSE とする。
fig
  論理値(FALSE)  コードチャンクがグラフ出力をするかどうか。
eps
  論理値(FALSE)  eps 形式のグラフィックファイルを出力するかどうか。
pdf
  論理値(TRUE)  pdf 形式のグラフィックファイルを出力するかどうか。
pdf.version  pdf のバージョンをセットする。デフォルトは pdf.options() で取られる。
pdf.encoding
  pdf のエンコーディングをセットする。デフォルトは pdf.options() で取られる。
png  論理値(FALSE)  png 形式のグラフィックファイルを出力するかどうか。R ≧ 2.13.0 で有効。
jpeg  論理値(FALSE)  jpeg 形式のグラフィックファイルを出力するかどうか。R ≧ 2.13.0 で有効。
grdevice  (NULL)  R ≧ 2.13.0 で有効。
width  数値(6)  図の横幅(インチ単位)
height  数値(6)  図の高さ(インチ単位)
resolution  数値(300)  インチあたりのピクセル数(png, jpeg でのみ)  
concordance  論理値(FALSE)
figs.only  論理値(TRUE)  

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

rle と inverse.rle

2011年10月05日 | ブログラミング

a <- c(0, 0, 1, 1, 0, 0, 0, 1, 0, 0) のような 0/1 要素からなるベクトルの連続する 0 を 1 個の 0 に縮小するというプログラム。
x <- with(rle(a), rep(values, ifelse(values == 1, lengths, 1)))
という回答があった。それを書き換えて
b <- rle(a); b$lengths[!b$values] <- 1; y <- inverse.rle(b)
とすると速度は倍になる。
z <- as.integer(unlist(strsplit(gsub("0+", "0", paste(a, collapse="")), "")))
は速度が半分になる。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ifelse 関数の挙動不審

2011年10月05日 | ブログラミング

以下では warning が出る。結果は正しいのだが。

> temp <- c("123", NA, "-", "---")
> ifelse(!(is.na(temp) | !grepl("-*[0-9]+.*[0-9]*", temp)), as.numeric(temp), NA)
 ifelse(!(is.na(temp) | !grepl("-*[0-9]+.*[0-9]*", temp)), as.numeric(temp),  中で警告がありました:
  強制変換により NA が生成されました 
[1] 123  NA  NA  NA

以下のようにすると warning は出なくなる。

> as.numeric(ifelse(!is.na(temp) & grepl("-*[0-9]+.*[0-9]*", temp), temp, NA))
[1] 123  NA  NA  NA

以下の例を見れば明らかであるが,ifelse では第1引数(論理演算式)の評価結果に関わらず,第2,第3引数が評価されてしまう。注意しなければ。

> x <- c(-2:3)

>  sqrt(x)
[1]      NaN      NaN 0.000000 1.000000 1.414214 1.732051
 警告メッセージ:
In sqrt(x) :  計算結果が NaN になりました

> ifelse(x >= 0, sqrt(x), NA)
[1]       NA       NA 0.000000 1.000000 1.414214 1.732051
 警告メッセージ:
In sqrt(x) :  計算結果が NaN になりました

> sqrt(ifelse(x >= 0, x, NA))    このようにすべし
[1]       NA       NA 0.000000 1.000000 1.414214 1.732051

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sweave-6

2011年10月03日 | RとLaTeX

Sweave-2 に書いたラッパーの最後で,platex と dvipdfmx を起動してやれば,最終の pdf ファイルができるはず。
拡張子を .Rnw にも対応させることも含め,現在のラッパーは以下の如し。

ms <- function(file, encoding="euc-jp", encoding2="euc")
{
    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)
    system(sprintf("/Applications/UpTeX.app/teTeX/bin/platex -kanji=%s %s", encoding2, file))
    system(sprintf("/Applications/UpTeX.app/teTeX/bin/dvipdfmx %s", sub(".tex", ".dvi", file)))
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sweave-5

2011年10月02日 | RとLaTeX

表は以下のようにする。

<<>>=
library(xtable)
@

<<>>=
d <- data.frame(i=1:5, x=rnorm(5), s=month.name[1:5])
print(xtable(d, caption="foo bar baz", label="tab1", digits=c(0, 0, 5, 0)), table.placement="htbp", caption.placement="top", include.rownames=FALSE)
@

フロートになる。

\begin{table}[htbp]
\begin{center}
\caption{foo bar baz}
\label{tab1}
\begin{tabular}{rrl}
  \hline
i & x & s \\
  \hline
 1 & 2.14673 & January \\
  2 & 1.41907 & February \\
  3 & 0.21646 & March \\
  4 & 1.60816 & April \\
  5 & 2.30823 & May \\
   \hline
\end{tabular}
\end{center}
\end{table}

print メソッド(print.table)を使用すれば,xtable をそのまま使ったのでは制御できないオプション指定ができる。

<<>>=
library(xtable)
@

<<>>=
ans <- lm(Sepal.Width ~ Sepal.Length + Petal.Width + Petal.Length, data=iris)
@
<<>>=
xtable(ans, caption="重回帰分析の結果", label="lab1")
@

<<>>=
print(xtable(ans, caption="重回帰分析の結果2", label="lab2"), table.placement="htbp", caption.placement="top")
@

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sweave-4

2011年10月01日 | RとLaTeX

\usepackage{ctable} があると,\includegraphics{foo} の拡張子が補われない件は,ctable.sty の28行目にある

\RequirePackage{color,keyval,array,tabularx,booktabs,rotating}

の color に問題があるようだ。color を省くと問題なくタイプセットができる。もう少し,原因を絞ろう。

\RequirePackage{keyval,array,tabularx,booktabs,rotating}

=======

どうも,color.sty というのは,

    \RequirePackage{color}

    と書いておけば色に関するコマンドが使えます.

    ただし, dvi ウエアによってはオプションをつけて

    \RequirePackage[dvips]{color}\RequirePackage[dviout]{color} 等と

    する必要があります.

という記述があることころを見ると,dvipdfmとは相容れないのかなあと思います。

まあ,色を使う必要はないので,どうしても ctable を使わなければならないときには,上記の行から color を省いた color2.sty でも使いますかね?

もっとも,Sweave-2 に書いたラッパーを使えばよいわけだけど。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村