Rのパッケージの internalな関数の文書化

R CMD checkすると、ドキュメントの存在しない関数は警告がでるのだけど、パッケージ内部で使うための関数も引っかかってしまう。

1.1.3 Package subdirectories

if a package pkg contains user-level objects which are for “internal” use only, it should provide a file pkg-internal.Rd which documents all such objects, and clearly states that these are not meant to be called by the user.

gridのRdを読めと書いてあったので読んでみる(R-2.11.0/src/library/grid/man/grid-internal.Rd)。

\name{grid-internal}

\alias{grid.legend}
\alias{grid.multipanel}
\alias{grid.panel}
\alias{grid.strip}
\alias{is.unit}
\alias{layoutRegion}
\alias{viewport.layout}
\alias{viewport.transform}
\alias{layout.heights}
\alias{layout.widths}
\alias{layout.torture}

\title{Internal Grid Functions}
\description{
  Internal Grid functions
}
\details{
  These are not to be called by the user (or in some cases are just
  waiting for proper documentation to be written :).
}
\keyword{ internal }

こんな感じ

Rのパッケージを作る

先週はR版のpit(Config::Pit)をつくっていて、昨日今日でパッケージ化してみたので感じたことのメモ。

パッケージのスケルトンの作成はpackage.skeletonで行える。その際にRdフォーマットというTeXっぽい文書の雛形が作成される。パッケージのインストールはR CMD INSTALLで行うが、その際にドキュメントがちゃんと存在するかチェックされる。Rdフォーマットは R CMD Rd2dviでdviに出力できて、これはさらにpdfに容易に変換できる。Rのpdfがちゃんとしているのはそのため。

Rのドキュメントの充実度の秘密はこのあたりにあるのかと思った。Rはドキュメントのキチンと書かれていることに慣れきっていて、もしドキュメントがいい加減な(ましてや、Exampleのない)パッケージは使うときに相当イライラしますからな。

あと、R CMD checkすると、ドキュメントの存在しない関数は警告がでる。

* checking for missing documentation entries ... WARNING
Undocumented code objects:
  pit_config pit_dir pit_profile_file pit.config pit.load
All user-level objects in a package should have documentation entries.
See the chapter 'Writing R documentation files' in manual 'Writing R

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。

Rのrequireとlibrary

Loading and Listing of Packagesから。

library(package) and require(package) both load the package with name package. require is designed for use inside other functions; it returns FALSE and gives a warning (rather than an error as library() does by default) if the package does not exist.

面白そうなので、試してみる。

まずはRでパッケージを作る準備。package.skeletonは便利

f <- function(x,y) x+y
package.skeleton(list=c("f"), name="testpkg")

f.Rの先頭で存在しないパッケージを読み込む

library(dummypkg) # or require(dummypkg)

f <-
function(x,y) x+y

libraryのほうはエラーになってインストール出来ないが、

$R CMD INSTALL testpkg
* installing to library ‘/Library/Frameworks/R.framework/Resources/library’
* installing *source* package ‘testpkg’ ...
** R
** preparing package for lazy loading
Error in library(dummypkg) : 
   'dummypkg' という名前のパッケージが見当たりません 
ERROR: lazy loading failed for package ‘testpkg’
* removing ‘/Library/Frameworks/R.framework/Resources/library/testpkg’

requireではwarningが出るが先に進む。

$ R CMD INSTALL testpkg
* installing to library ‘/Library/Frameworks/R.framework/Resources/library’
* installing *source* package ‘testpkg’ ...
** R
** preparing package for lazy loading
Loading required package: dummypkg
 library(package, lib.loc = lib.loc, character.only = TRUE,\
 logical.return = TRUE,  中で警告がありました: 
  'dummypkg' という名前のパッケージが見当たりません  

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。

Rのスクリプト中でエディタによる入力をしたい場合

perlみたいに。

tempfile <- tempfile(pattern = "file", tmpdir = tempdir())
system(paste(Sys.getenv("EDITOR"),tempfile))

tempfileは終了時に自動的に消されるっぽい。

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。

この本もいいけどヘルプのbaseパッケージを熟読するか??を使ってサーチした方が欲しい情報にあたることが多いかも。

Shiga.R

ちょうど私とbonohuさんが大阪に行くので、そのタイミングで企画してもらいました(zgmfx20aありがとうございます)

ちなみに僕だけネタものです。

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。

twitteRを使ってみた

RのtwitterクライアントであるtwitteRを使ってみた。

library(twitteR)
sess <- initSession(user,password)
friendsTimeline(session=sess) # タイムライン表示
tweet("rtest", session=sess) # tweet

お手軽感は高い。

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。

Rで作図したWindowをpngに出力するサンプル

dev.copyを使う。今までスクリーンキャプチャしてたけど、今度からはこっちで。

library(ggplot2) 
qplot(wt, mpg, data=mtcars, colour=factor(cyl)) 
dev.copy(device=png,filename="testcopy.png")
dev.off()

ggplot

stochastic proximity embedding

最近ダラけたというか、やる気が下がっていたところ、stochastic proximity embeddingとつぶやかれていたので、おー面白そうと調べたらpdfがあったので読んでみた。

多次元尺度法同様に、距離情報から座標を構成する手法らしい。ペーパーだと次元縮約の方法として紹介されているけど、一回距離情報を求めてそれを任意の次元に置き直すのでまぁ似たようなものかなと。

ただ、SPEのほうはデータセットが大きくなっても計算量が爆発しないので大きいデータに使えるそうだ。

  • マップする次元を決めたら初期値としてランダムに座標を与える
  • ランダムに二点を選ぶ(xi, xj)
  • 距離が一致するように遠ければお互いを近づけ、短ければお互いを離す

  • 何回か二点を選んで更新処理を行ったらラムダの値を小さくして、上を又繰り返す

ほーこれで上手くいくんかいなと思ったのだが、プラクティカルにはよさそうかも。でも、ベストな構造におちないのと、ラムダの刻み幅は小さくしないといけないっぽいな。 ちなみに、CRANにもspeというパッケージがあったので、今回これを動かしてみた。

library(spe)
data(phone)
embed <- spe(phone, edim=2, evalstress=TRUE)
plot(embed$x)

spe_phone

距離行列から計算できると便利だけどこのパッケージは座標をインプットにしなきゃいけないのとユークリッド距離固定な感じですね。実用で使う場合は自分で実装した方が思い通りに動かせるかな。あとアルゴリズムが単純なので並行処理もできるような気がするけど。そのうちScalaで書いてみたい感じ。

Mixed-Effects Models in S and S-PLUS chapter 3

groupedData objectに関して

ProductName Mixed-Effects Models in S and S-PLUS (Statistics and Computing)
José Pinheiro,Douglas Bates
Springer / ¥ 5,911 ()
在庫あり。

  • plotに関して
  • outerの使い方
  • Trellisコントロール
  • Summaries

データのグルーピングの仕方と表示に関して一章割いてるが、混合効果モデルなのできちんと押さえておく必要がある。

Mixed-Effects Models in S and S-PLUS chapter 1

nlmeを使いこなすために。

ProductName Mixed-Effects Models in S and S-PLUS (Statistics and Computing)
José Pinheiro,Douglas Bates
Springer / ¥ 5,742 ()
在庫あり。

  • fixed effects:平均に影響を及ぼす
  • random effects:分散に影響を及ぼす

ergoStoolのサンプルを。

residual plot(p.21)

ergostool_res

  • 全ての効果に対する因子はanovaで評価する必要がある
  • the mean response across the population would be zero.