カリー化と作曲の詳細
partial
インパッケージpryr
とほぼ同じですが、方法が異なるCurry
インパッケージがあります。functional
(Curry
は引数のリストを作成し、それを にフィードしdo.call
ます。partial
文字通り、デフォルトの引数が設定された最初の関数を呼び出す新しい関数を作成します。)
R-devel のこの議論で、 Luke Tierney はいくつかの問題を指摘していますCurry
( 「これは、評価/遅延評価に関して、類似の匿名関数とはまったく異なる動作をします。さらに、do.call にはかなり奇妙な側面があるため、それがsys.xyz関数とどのように相互作用するか、そして多くの場合、あなたが望むことをしません。デフォルトのように、quote = FALSEの場合に気をつけます.これを追加すると、解決できるよりも多くの問題が発生します." )。これらの問題 (発生頻度は低いですが) は、 では問題になりませんpartial
。
カリー化/部分関数適用への他のアプローチ:
wargs
パッケージ内dostats
(似てpartial
いますが、何か特徴があります:
wargs(mean, na.rm=TRUE)(c(1:5, NA), na.rm=FALSE)
# this works and gives NA as answer, so na.rm=FALSE overrides na.rm=TRUE
# with partial, this would result in an error:
#### formal argument "na.rm" matched by multiple actual arguments
%but%
パッケージにはありますoperators
が、汎用関数では動作しません。そう ...
df <- data.frame(a=c(1:5,NA), b=c(NA, 2:6))
sapply(df, mean %but% list(na.rm=TRUE))
# a b
# NA NA
# ... but2
sapply(df, sd %but% list(na.rm=TRUE))
# a b
# 1.581139 1.581139
また、論理引数を設定するための別のメカニズムがあります。
# from the help page
grep %but% "pf" # grep, with perl and fixed set to TRUE
pryr
作成に関しては、とdostats
:compose
と-- の両方に同じ名前の (ただし異なる) バージョンがあり、%.%
どちらも とは異なりfunctional:::Compose
ます。
最後に、匿名関数の代わりに便利に使用できるものがpryr
含まれていることを追加します。f
function