5

これは実際には問題ではありませんが、より洗練された解決策があるかどうか疑問に思っています:

ベクトルがあり、ベクトルvec <- rlnorm(10)化されていない関数をそれに適用したいとしexpましょう。

sapply( vec, exp )

しかし、適用したい関数がネストされている場合、式は単純ではなくなります。

sapply( vec, function(x) exp( sqrt(x) ) )

applyこれは、plyr家族と一緒にいつも私に起こります。

だから私の質問は、(匿名)関数を明示的に定義せずに関数をネスト(またはパイプ)するエレガントな方法は一般的にありますfunction(x){...}か?何かのようなもの

# notrun
sapply( vec, sqrt | exp )

または類似。

4

2 に答える 2

5

パッケージ機能には関数が含まれていComposeます。

library(functional)
id <- Compose(exp, log)
id(2) # 2

その実装は、たとえば、機能パッケージ内の残りのものを必要としない場合、ソースに含めるのに十分簡単です。

R> Compose
function (...) 
{
    fs <- list(...)
    if (!all(sapply(fs, is.function))) 
        stop("Argument is not a function")
    function(...) Reduce(function(x, f) f(x), fs, ...)
}
<environment: namespace:functional>
于 2013-06-19T12:22:11.743 に答える