更改范围内所有调用的函数的默认参数

use*_*035 3 r

假设您要将函数的参数的默认值(以修改让我们使用的想法dnorm)mean=0,sd=1更改为 mean=pi,sd=pi在另一个函数的范围内foo.

你可以这样做:

T_par<-list(mean=pi,sd=pi)
x=3
do.call(dnorm,c(list(x),T_par)) 
Run Code Online (Sandbox Code Playgroud)

但实际上我发现在我的应用程序中使用的开销do.call太高了.

我想要做的是创建一个函数my_dnorm,该函数将是一个副本,dnorm除了参数的默认值,它将根据T_parmy_dnorm不是调用 而设置do.call(dnorm,c(list(x),T_par)).这该怎么做?

jdh*_*son 6

您可以更改函数的默认值:

mydnorm <- dnorm
formals(mydnorm)$mean <- 2
> mydnorm
function (x, mean = 2, sd = 1, log = FALSE) 
.External(C_dnorm, x, mean, sd, log)
<environment: namespace:stats>
Run Code Online (Sandbox Code Playgroud)

所以使用你的清单:

T_par<-list(mean=7,sd=10)
mydnorm <- dnorm
formals(mydnorm)[names(T_par)] <- T_par
mydnorm
> mydnorm
function (x, mean = 7, sd = 10, log = FALSE) 
  .External(C_dnorm, x, mean, sd, log)
<environment: namespace:stats>
Run Code Online (Sandbox Code Playgroud)