2016-12-12 11 views
0

私は非常に単純な関数ラッパーをRに書こうとしています。これはfを受け取り、最初の引数が負のときにgがゼロを返すgを返します。予想通り、私は次のコード関数のシグネチャを保持するよりもR関数のラッパー

wrapper <- function(f) { 
    function(x, ...) { 
     if(x <= 0) { 0 } 
     else { f(x, ...) } 
    } 
} 

Thgeラッパーの作品を持っていますが、関数のシグネチャに

> wdnorm <- wrapper(dnorm) 

> args(dnorm) 
function (x, mean = 0, sd = 1, log = FALSE) 
NULL 

> args(wdnorm) 
function (x, ...) 
NULL 

を維持するための方法がありますされて、私はこのような何かをしたいと思います(ただし、明らかにそれはしていません仕事)

args(g) <- args(f) 

これはRで可能ですか?

答えて

1

これはあなたの望みです。あなたは本当にこれが必要ですか?

wrapper <- function(f) { 
    f2 = function(x) { 
     if (x <= 0) { 0 } 
     else { do.call(f, as.list(match.call())[-1]) } 
    } 
    formals(f2) = formals(f) 
    f2 
} 

wdnorm <- wrapper(dnorm) 

args(dnorm) 
args(wdnorm) 

wdnorm(-5) 
wdnorm(5) 

出力

> args(dnorm) 
function (x, mean = 0, sd = 1, log = FALSE) 
NULL 
> args(wdnorm) 
function (x, mean = 0, sd = 1, log = FALSE) 
NULL 

> wdnorm(-5) 
[1] 0 
> wdnorm(5) 
[1] 1.48672e-06 
関連する問題