outer関数便利だお

便利便利。これは面白い。

> outer(2006:2007,1:12,paste)
     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]    
[1,] "2006 1" "2006 2" "2006 3" "2006 4" "2006 5" "2006 6" "2006 7" "2006 8"
[2,] "2007 1" "2007 2" "2007 3" "2007 4" "2007 5" "2007 6" "2007 7" "2007 8"
     [,9]     [,10]     [,11]     [,12]    
[1,] "2006 9" "2006 10" "2006 11" "2006 12"
[2,] "2007 9" "2007 10" "2007 11" "2007 12"
> outer(2006:2007,1:12,function(x,y) paste(x,y,sep="年"))
     [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]     
[1,] "2006年1" "2006年2" "2006年3" "2006年4" "2006年5" "2006年6" "2006年7"
[2,] "2007年1" "2007年2" "2007年3" "2007年4" "2007年5" "2007年6" "2007年7"
     [,8]      [,9]      [,10]      [,11]      [,12]     
[1,] "2006年8" "2006年9" "2006年10" "2006年11" "2006年12"
[2,] "2007年8" "2007年9" "2007年10" "2007年11" "2007年12"

で、こいつはapplyファミリーを使えばベクトルで使い易いようにできるよなとか思い付いた。ついに自分からapplyファミリーへ。applyファミリーはRを使いこなす上*1で避けては通れないところなので、どっかでまとめたい。

> lapply(outer(2006:2007,1:12,function(x,y) paste(x,y,sep="年")),function(x) print(paste(x,"月",sep="")))
[1] "2006年1月"
[1] "2007年1月"
[1] "2006年2月"
[1] "2007年2月"
[1] "2006年3月"
[1] "2007年3月"
[1] "2006年4月"
[1] "2007年4月"
[1] "2006年5月"
[1] "2007年5月"
[1] "2006年6月"
[1] "2007年6月"
[1] "2006年7月"
[1] "2007年7月"
[1] "2006年8月"
[1] "2007年8月"
[1] "2006年9月"
[1] "2007年9月"
[1] "2006年10月"
[1] "2007年10月"
[1] "2006年11月"
[1] "2007年11月"
[1] "2006年12月"
[1] "2007年12月"

で、ChangeLogに書いてたやつをタブ抜きで表示するためにperlのワンライナーとかをちょこちょこ書いている自分にちょっとうれしくなったとかそういうお話でした。

see also

*1:というか計算を早くさせるとか、そういうのも