skype読書会1回目

http://wakuteka.info/R/
さんかした.ベクトル,行列,配列あたり.

メモった事

評価される順序,長さの異なるベクトル同士の演算
matrix(1:3 + 1:7, nrow=2, ncol=5)

などとやった場合,まず

1:3 + 1:7

が評価され,次のベクトルが生成される.

2 4 6 5 7 9 8

ここでは短い方のベクトル1:3が繰り返し使用されていること,ベクトルの長さ(要素の個数)が7になっていることに注意.長さが異なるベクトル同士で演算をした場合,短い方のベクトルが繰り返して使用される.
その次に今生成されたベクトルがmatrixに引数として渡される.つまり,最初のヤツは

matrix(c(2,4,6,5,7,9,8), nrow=2, ncol=5)

と同じということ.
結果は次のようになる.

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    6    7    8    4
[2,]    4    5    9    2    6
Warning messages:
1: In 1:3 + 1:7 :
  longer object length is not a multiple of shorter object length
2: In matrix(1:3 + 1:7, nrow = 2, ncol = 5) :
  data length [7] is not a sub-multiple or multiple of the number of rows [2]

今度は今生成され引数として渡されたベクトルが繰り返し使用される(matrixは長さ10のベクトルを欲しがっている).
Warningを見ると,まず1:3+1:7を計算したときに怒られていて,次にmatrixにその結果を渡すときに怒られていることが分かる.
またこの例のように長さの異なるベクトルを使う場合,長い方のベクトルの長さが短かい方のベクトルの長さの整数倍でないとWarningが出る.長さが整数倍ならばこのようなWarningは出ない.

return()は遅い

省略できるときは省略しましょう.(by id:mickey24)

返り値を画面に表示してくれなくていいとき

例えばdev.off()関数を実行すると現在のグラフィックデバイスとデバイス番号が表示される。nullデバイスはオフにできないので、普通は最低でも次の様な表示がされる。

> plot(1)
> dev.off()
null device 
          1 

この表示をさせないためには、

> invisible(dev.off())

というようにinvisible()関数を使えばよい(ただしWarning、Errorは表示される)。(by id:hiratake55)
あるいは、

> dev.off() -> hoge

として返り値を適当なオブジェクトに代入してしまっても表示されない。(バッドノウハウ?)。
代入操作はコンソールへの出力を行なわないためこのようなことができる。他のほとんどのオブジェクトは実行時にprint()が自動的に補われるので普通はコンソールに適当な出力が発生する。この自動的に補われるprint()を実行させないのがinvisible()といった感じか。

感想

脱線ためになる.
みっきー先生ありがとう.
発声しないのは僕の習性.