Hadoopを使えるようになりたい

Hadoopを使って、R言語での計算を並列計算させたいなと考えています。
ひとまずR上でHadoopを使えるパッケージrhdfsがあるようなので、それをインストールしてみます。
インストールするために参考になりそうなサイトは、以下になります。
http://metasearch.sourceforge.jp/wiki/index.php?Hadoop%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7
http://wiki.livedoor.jp/d_azu/d/Hadoop%20Setup
http://happy-camper.st/lang/java/hadoop/hadoop-on-macosx.html
http://d.hatena.ne.jp/acro-engineer/20111204/1323010742
https://github.com/RevolutionAnalytics/RHadoop/wiki/rhdfs

rhdfsがダウンロードできるサイトは以下になります。
https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads

一つ困ったことに、2012年2月18日現在においてrhdfsがRのバージョン2.14に対応していないみたいです。
ひとまずRをダウングレードしてみます。

R言語: クロージャ

クロージャについて
関数が、その関数のスコープ外のレキシカル変数を参照している状況のことらしい.まあ、包含関係にある一段階上の親(スコープ)の変数を参照してるってことかな.この関数をクロージャといったり、この関数と参照されている変数を含めてクロージャといったりするらしい.


■例1

outer.fun1 <- function(a){
con <- 1
inner.fun <- function(x){
con <- con + 1
con * x + a
}
return(inner.fun)
}

#outer.fun1内の変数conとの違いを調べるために宣言
con <- 10

f1 <- outer.fun1(1) #aに1を与えている

f1(3) #出力は7
f1(3) #出力は7
f1(3) #出力は7

print(con) #出力は10


■例2 カウンターみたいな機能
outer.fun2 <- function(){
con <- 0
inner.fun <- function(){
#永続付値演算子「<<-」を使うところがミソ.
#これは、一つ階層が上のスコープ(親)の変数を書き換えることが可能.
con <<- con + 1
}
return(inner.fun)
}

con <- 10

f2 <- outer.fun2()

f2() #出力は1
f2() #出力は2
f2() #出力は3

print(con) #出力は10


■例3 カウンターみたいな機能(無名関数)
outer.fun3 <- function(){
con <- 0
function(){
con <<- con + 1
}
}

con <- 10

f3 <- outer.fun3()

f3() #出力は1
f3() #出力は2
f3() #出力は3

print(con) #出力は10


クロージャの特徴(例2より)
1) outer.fun2の変数conはinner.fun内で参照されており、スコープ(outer.fun2の書かれた部分)が終了した後でもメモリ上から削除されない.
※あるスコープ内で宣言した変数は、そのスコープが終わったときに、どこからも参照されていないとメモリから削除されるらしい.
2) outer.fun2という関数の範囲(あるスコープ)から外れると、その関数内で宣言した変数conの中身を見ることができなくなる. この関数内のconと外のconは別物である.
3) outer.fun2という関数のスコープを外れると、inner.funからだけouter.fun2内の変数conを使うことができる.


便利そうだが、今のところ使い道が思い浮かばない.

クロージャについての説明は、言語はjavascriptだが、以下のサイトが分かりやすい。
http://dqn.sakusakutto.jp/2009/01/javascript.html

R言語: tryでデバッグ

ループ処理をする場合に、ループの始めの方は上手く動いているが、どこかで問題が発生しているようだという場合に使います。

以下の例は、xに1から100までの数字を代入し、forループ内においてif文の判定をしてから、printを用いて出力をしています。
tryとinheritsを使うことで、エラーが起きたときにデバグモードに自動的になり、その原因を見つけやすくなります。
まあ、この例では、printをしているので、x[101]は存在しないことは一目瞭然ですが、、

x <- c(1:100)

for(i in 1:101){
error.flag <- try(if(x[i]){ print(x[i]) }, TRUE)
if(inherits(error.flag, 'try-error')){
error.msg <- sprintf("forループの%s回目にエラー", i)
browser()
}
}

RのXMLが使えるようになりたいなと

そんなことを考えている今日この頃です。
CRANにおけるXMLパッケージのページは以下のURLです。

http://cran.r-project.org/web/packages/XML/index.html

どこぞのwebサイトから株式の時価総額だとか、細々したデータを取りたいなと思っている訳です。

R言語: tryの使い方

tryの使い方についてです。
tryの良いところは、エラーで強制終了しないことでしょうか。
まあ、tryを使うときはどんなエラーが起こるかを把握しておかないといけないのですが。

以下、tryを使ったコードです。
まずTESTFUNという関数をつくり、それを実行しています。


TESTFUN <- function(){
#要素が1つだけの配列xを作る.
x <- c(1)

#xは1つしか要素がないのに、xの2番目の要素であるx[2]でif文を実行しようとする.
#try()を使わずに、このif文を実行しようとするとエラーとなり強制終了する.
error.flag <- try(
if(x[2]){print("OK")},
silent = TRUE
)

print("強制終了しませんでした。")

#error.flagにtry()の結果が入るので、inheritsでエラーが発生したかを判断できる.
#他のプログラミング言語のcatchにあたる部分かな.
if(inherits(error.flag, 'try-error')){
print("error!")
}
}

#上記の関数を実行する
TESTFUN()