blog.kur.jp

バイオリンと山、自転車をこよなく愛するkurのチラシの裏。たまには技術的なことを書いたりするかも知れません。

Rのネームスペースの概念に戸惑う

ループ変数の扱いに戸惑ったのでメモ. こんな感じの処理を書いて,ループ処理を行う時にループの中で加算を行おうと思った時に,

for(i in 1:4){

    cat("i=",i,"\n");

    i <- i + 1;

    cat("i=",i,"\n");

}

Cだと出力結果は,こんな感じになるはず.

i=1 i=2 i=3 i=4

ところが,Rでこの処理を実行すると,

i=1 i=2 i=2 i=3 i=3 i=4 i=4 i=5

というものが出力される.ネームスペース的に考えると,ループの中と外は別物として考えるのは,実は自然なのかもしれない(もしかしたら私が勘違いしてるのかもしれないけど)んだけど,慣れてないのでちょっと戸惑います.

そのおかげで,

for(i in 1:4){
    for(i in 1:4){
        cat(i)
    }
}

というコードを書いてしまっても,ちゃんと実行できるのってはメリットなんだか,どうなんだか.

ていうかそもそも,この場合のちゃんとの定義って何だ?(笑)