Rで「-1*f()が気持ち悪い」と言う指摘を受けて、-f()だとSyntax errorになりそうで逆に気持ち悪いんじゃないかと思っていたら、年寄りの戯言でした。
どういう事かと言うと、この二つがRではS式が異なるわけです。
f <- function(n){ n + 1 }
as.list(quote(-f(2)))
as.list(quote(-1*f(2)))
実行結果は以下のようになります。Rにはオペラント一つの演算子"-"があるのか!*1
1 | 2 | 3 | |
---|---|---|---|
-1*f() | `-` | f(2) | |
-f() | `*` | -1 | f(2) |
速度的には大きく影響する部分にならないと思いますが、以下のような単純な100万回ループで2.42秒が2.05秒になったりするので、細かいチューニング・ポイントとして覚えておいても良いかも知れません。
gc(); gc()
n <- 0
system.time({
for(i in 1:1000000){
n <- n - f(7)
}
})
print(n)gc(); gc()
n <- 0
system.time({
for(i in 1:1000000){
n <- n - 1 * f(7)
}
})
print(n)