16

假设你有一个函数f<- function(x,y,z) { ... }。您将如何将常量传递给一个参数,但让其他参数发生变化?换句话说,我想做这样的事情:

 output <- outer(x,y,f(x,y,z=2)) 

此代码不评估,但有没有办法做到这一点?

4

2 回答 2

19
outer(x, y, f, z=2)

函数后面的参数是它的附加参数,...参见?outer. 这种语法在 R 中很常见,例如整个apply家族的工作方式都是一样的。

更新:

我无法准确说明您想在后续问题中完成什么,但认为此表单上的解决方案可能是您应该使用的。

outer(sigma_int, theta_int, function(s,t)
    dmvnorm(y, rep(0, n), y_mat(n, lambda, t, s)))

sigma_int这将为和中的值的每个组合计算方差矩阵theta_int,使用该矩阵定义密度并在 中定义的点中对其进行评估y。我无法测试它,因为我不知道所涉及变量的类型和维度。

于 2012-08-14T11:22:03.950 回答
2

outer(连同 apply 系列函数和其他函数)会将额外的参数传递给它们调用的函数。但是,如果您正在处理不支持这种情况的情况(optim作为一个示例),那么您可以使用更通用的柯里化方法。对函数进行柯里化是创建一个新函数,该函数具有(某些)变量固定,因此具有更少的参数。

library("functional")
output <- outer(x,y,Curry(f,z=2))
于 2012-08-14T16:47:51.547 回答