假设您要将函数的参数的默认值(以修改让我们使用的想法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_par而my_dnorm不是调用
而设置do.call(dnorm,c(list(x),T_par)).这该怎么做?
您可以更改函数的默认值:
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)