スキップしてメイン コンテンツに移動

投稿

9月, 2010の投稿を表示しています

R の qvalue package のインストールで tcltk がなくてはまる

R の qvalue package が tcltk に depend しているのでインストールできない問題でいつもハマるので書いておく。

R の tcltk を on にするために自分でコンパイルする。
[code]
sudo yum install tk-devel
sudo yum install tcl-devel
curl -O http://cran.r-project.org/src/base/R-2/R-2.11.1.tar.gz
tar zxvf R-2.11.1.tar.gz
cd R-2.11.1
./configure --prefix=/opt/ --with-tcltk=yes
make
sudo make install
[/code]

qvalue を入れる。
[code]
sudo R
install.packages("qvalue")
[/code]

Rでオブジェクト指向プログラミング: S4クラスの定義

第5回目です。いよいよコードを読んできます。

ファイルの配置とS4クラス・メソッドの定義の関係
Rディレクトリにこのパッケージのソースが含まれています。各々のファイルをみてきましょう。

[code]
tree GOstats
GOstats/
|-- DESCRIPTION
|-- NAMESPACE
|-- R
| |-- AllClasses.R
| |-- AllGenerics.R
| |-- GOHyperGResult-accessors.R
| |-- GOgraph.R
| |-- GOhyptest.R
| |-- hyperGTest-methods.R
| |-- hyperGtable.R
| |-- shortestPath.R
| |-- triad.R
| `-- zzz.R
[/code]

まず、すべてのクラス定義は R/AllClasses.R に含めることがわかります。また、すべての総称関数 (Generic function) の定義は、R/AllGenerics.R に含めます。総称関数のコードは、R/メソッド名-methods.R という名前にします。オブジェクトの変数にアクセスする、いわゆる accessor method は R/クラス名-accessors.R に集めます。

これらはこのようにしなければ動作しないというわけではありませんが、BioC ではこのような構造で実装することが推奨されています (Bioconductor パッケージガイドライン: S4 クラスとメソッドを参照)。

GOstats の場合もこの構造に則って実装されていますね。ファイル名をみると、hyperGTest-methods.R と GOHyperGResult-accessors.R があります。ファイル名から、このパッケージは、GOHyperGResult というクラスと、hyperGTest という総称関数を持っていることがわかります。

S4クラスの定義
では、実際にそのクラスどのように定義されているか見てみましょう。

AllClasses.R
[code]
setClass("GOHyperGResult",
contains="HyperGResultBase",
repr…

R package の構造

第4回目は、Rのパッケージの構造について書きます。

まず、読んでいくコードですが、Bioconductor のなかからGOstats を選びました。これはある遺伝子セットに有意に assign される Gene Ontology を発見するためのパッケージです。機能の詳細は vignette を読んでください。

なぜこのパッケージを読むのか
1. Pure R
2. S4で書かれている
3. RUnit によるユニットテストがついている
4. コードが短い (952行)
5. Rの開発者(というか創始者)であり、BioC developer core team のメンバーである R. Gentleman がメインで開発・メンテしているっぽいので、コードが綺麗なはず。

パッケージの構造
ではパッケージの中身を覗いてみます。
[code]
tree GOstats
GOstats/
|-- DESCRIPTION
|-- NAMESPACE
|-- R
| |-- AllClasses.R
| |-- AllGenerics.R
| |-- GOHyperGResult-accessors.R
| |-- GOgraph.R
| |-- GOhyptest.R
| |-- hyperGTest-methods.R
| |-- hyperGtable.R
| |-- shortestPath.R
| |-- triad.R
| `-- zzz.R
|-- data
| |-- Bdists.rda
| `-- Ndists.rda
|-- inst
| |-- CITATION
| |-- Scripts
| | |-- TESTP.R
| | `-- distance.R
| |-- UnitTests
| | |-- Makefile
| | |-- ghgans10.rda
| | |-- hyperGTest_test.R
| | |-- runall.sh
| | |-- runalltests.R
| | `-- runfile.sh
| `-- doc
| |-- GOstats.bib
| |-- GOstatsForUnsupportedOrganisms.Rnw
| |-- …

RubyからRを使うRinRubyを試してみた

Ruby から R へアクセスできる RinRuby について日本語の文章があまりないみたいなので書く。

今回の環境は僕が常用している Mac OS X 10.6.4 と R 2.11.1, Ruby 1.9.2, RubyGems 1.3.7です。Ruby 1.8系でも動きそうですが、まさか、まだ 1.8 系使っているとか、ありえないですよねー、まさかねー。

まず RinRuby をインストールするよ。
[code]
sudo gem install rinruby
[/code]

すごく簡単。適当にあることないことコードを書く。

[ruby]
#!/usr/bin/env ruby

require 'rubygems'
require 'rinruby'
require 'pp'

sample_size = 100
hist_file = "/Users/itoshi/Projects/rinruby/hist.png"

# うざいメッセージを止める
R.echo(enable = false)

# pull メソッドで R コードの実行結果を受けとる
R.x = R.pull "rnorm(#{sample_size})"

# 関数も問題なく使える
R.x_sum = R.pull "sum(x)"
R.x_sd = R.pull "sd(x)"

# Ruby で出力する
puts R.x_sum
puts R.x_sd

# 関数のように数行のときはヒアドキュメントを使う
R.eval <<EOF
myfactorial <- function(n) {
if (n <= 1)
return(1)
else
return( n * Recall(n-1) )
}
fac <- myfactorial(#{sample_size})
EOF

# Rでは fac という変数は、Ruby からは R.fac でアクセスできる
puts R.fac

# plot もできる
# export DISPLAY=localhost:0.0 して X11 の起動を忘れずに (Mac)
R.eval <<EOF
png("#{hist_file…

Bioconductor には S4 で書かれたコードがどのぐらいあるのか

「シリーズ: 良質なR package のコードを読むよ」の第3回目です。

前回までのあらずじ
前回は BioC のコードを得る方法について書きました。

第2回: Bioconductor のソースコードを得る
第1回: Bioconductor のパッケージについて知る

なにをするか?
どのパッケージを読むのか決めます。S4のパッケージを読みたいのでそれを探します。

S4パッケージを探す
S4 なのでソースコードに setClass があるはず。package/R/*.R のなかに setClass が出てくるコードを探します。
[code]
grep setClass */R/*.R |ruby -lane 'puts $_.split(/\//)[0]' |sort -u|less -S
ACME
AffyCompatible
AnnBuilder
AnnotationDbi
ArrayTools
BCRANK
BSgenome
BioMVCClass
Biobase
Biostrings
BiostringsCinterfaceDemo
BufferedMatrix
CALIB
CAMERA
CGHbase
CGHcall
CNTools
Category
ChIPseqR
ChromHeatMap
DEGseq
DESeq
DFP
DNAcopy
DynDoc
EBImage
EBarrays
GEOquery
GGBase
GGtools
GOstats
GSEABase
GeneAnswers
GeneRegionScan
GeneSpring
GeneTraffic
GeneticsBase
GenomeGraphs
GenomicFeatures
GenomicRanges
Genominator
HTqPCR
IRanges
KCsmart
KEGGgraph
LiquidAssociation
MEDME
MLInterfaces
MVCClass
MassArray
MergeMaid
MotIV
PAnnBuilder
PCpheno
PGSEA
PICS
PatientGeneSets
RMAGEML
ROC
RPA
RTCA
RTools4TB
RWebServices
Ratlpow
ReadMatcher
Rgraphviz
Ringo
Rmagpie
RmiR
Rolexa
RpsiXML
Rredland
Rrsat
Rsamtools
Rswub
Rtreemix
Ruuid
SA…

Bioconductor のソースコードを得る

「シリーズ: 良質なR package のコードを読むよ」の第2回目です。

前回までのあらずじ
前回は BioC を読むことに決めて、そのパッケージの基礎知識について書きました。( 第1回: Bioconductor のパッケージについて知る )

なにをするか?
Bioconductor のコードを取得します。BioC のコードは subversion で管理されています。ウェブで閲覧する方法と、subversion で全ソースコードを得る方法を書きます。

ウェブからソースコードをみる
一番簡単にソースコードを見る方法はウェブ経由でソースコードレポジトリを表示することです。ウェブからみれるので iPad の Mobile safari で、ごろごろしながらや電車のなかで、ソースコードが見れるのが良いですね。

https://hedgehog.fhcrc.org/bioconductor/trunk/madman/Rpacks/
ID: readonly, Password: readonly でアクセスできます。ひとつのパッケージがひとつのディレクトリになっています。

そもそも動いているコードを見ないと意味がありません。稼動状況は以下で見ることができます。これはBioC 2.6 の各パッケージの動作状況です。
http://bioconductor.org/checkResults/2.6/bioc-LATEST/

Subversion を使ってソースコードを得る
3Gぐらいあります。以下のコマンドですべてのソースコードを得ることができます。username と password は readonly です。
[code]
svn co --username readonly --password readonly https://hedgehog.fhcrc.org/bioconductor/trunk/madman/Rpacks Rpacks-devel
[/code]

Rpacks-devel ディレクトリにすべてのソースコードがダウンロードされています。こちらもひとつのパッケージがひとつのディレクトリになっています。

特定のパッケージのみ得たい場合は、
[code]
svn co https://hedgehog.fhcrc.org/bioconductor/trunk/madman/Rpac…

良質な R package のコードを読むよ

突然ですが「シリーズ: 良質なR package のコードを読むよ」が俺のなかだけで始まりました。

良質のRコードといえば、Bioconductor (以下、BioC) ですね。ここでは BioC を読んでいきますが、すべての R ユーザに有益なはずです。あまり BioC だと気付かずに使っているパッケージもあるはずよ。R本体のコードを読む訳ではありませんので誤解なきよう。

目次
第1回: Bioconductor のパッケージについて知る
第2回: Bioconductor のソースコードを得る
第3回: Bioconductor にはS4で書かれたコードがどのぐらいあるか
(連載中)

なぜ Bioconductor を読むのか?
BioC は R を開発しているメンバーと重なっているのでコードの質が高い(と期待
コードレビューされているので質が高い(と期待
S4を推奨しているので S4 OOP な R コードが読める

なにをするのか?
BioCのコードを読み進めたときに書いたメモをアップしていきます。メモなのであまり読者を想定していません。よーわからん、という人は元の情報に当たるか、聞いてください。

BioCパッケージについて知る
さて本題です。今回は、R パッケージに求められることや、その構造を知るため、Bioconductor パッケージガイドラインパッケージサブミッションガイドを読みます。

あまり細かいことを書いてもしょうがないので、ざっくりとサマリを書きます。BioCは特にコードの質とドキュメンテーションについてこだわっていることがわかります。

BioCのパッケージは以下の条件を満す必要があります。すべて must です。

1. R CMD build, R CMD check が通ること
Windows, Mac, Linux の3つのプラットフォームでチェックが通る必要があります。

2. 重複がないこと
パッケージ名の重複をチェック
[code]
source("http://bioconductor.org/biocLite.R");
biocLite("mypackage")
[/code]

混乱を避けるためCRANとBioCの両方をパッケージを登録してはいけません。
またすでにあるパッケージやクラスの機能的を積極的に利用し、機能的な重複も避けるようにし…