lambda - yaotti's diaryのをRでやろうとしたけど、かっこよくできない。
当たり前だけど、無名関数自体は以下のように書ける。
function(a){function(b){a+b}}
しかし、これのに値を入れても5を返してくれない。
> function(a){function(b){a+b}}(10)(5) function(a){function(b){a+b}}(10)(5)
で、かっこを付けると値も返してくれたなーというのを思い出した。
> aaa <- 10-5 > (aaa <- 10-5) [1] 5
じゃあ、これで解決か、と思ったが値を返してくれるのは代入のコンテクストで、ということのようだ。
> (function(a){function(b){a+b}}(10)(5)) function(a){function(b){a+b}}(10)(5)
もちろん、名前を付ければ速攻で解決する。
> hoge <- function(a){function(b){a-b}} > hoge(10)(5) [1] 5
しかし、名前を付けるとかだめである。無名関数でなんぼ、である。これで返してくれるか、これとほぼ等価な感じでできないと。
function(a){function(b){a+b}}(10)(5)
色々やってみる
sapplyで逃げる
できたけど、なんか嫌だな。。。
> sapply(10,function(a){sapply(5,function(b){a-b})}) [1] 5
Mapでどうだ
リストがひどいことになってるけど、返ってはくるwww。
> Map(function(a){Map(function(b)a-b,5)},10) [[1]] [[1]][[1]] [1] 5
うーん。。。
何かいい方法が思いうかばないな。。。別に何かに使うというわけではないんだけど、気になる。
というわけで誰かかっこいい解法を知っていたら教えてください><