使用具有多变量函数的outer()

时间:2012-08-14 11:10:10

标签: r

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

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

此代码未进行评估,但有没有办法执行此操作?

2 个答案:

答案 0 :(得分:18)

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_inttheta_int中每个值组合的方差矩阵,使用该矩阵定义一个密度并在y中定义的点中对其进行评估。我无法测试它,因为我不知道所涉及的变量的类型和尺寸。

答案 1 :(得分:2)

outer(以及apply函数系列和其他函数)会将额外的参数传递给它们调用的函数。但是,如果您正在处理不支持此情况的情况(optim是一个示例),那么您可以使用更通用的currying方法。咖喱函数就是创建一个新函数,其中(某些)变量已修复,因此参数较少。

library("functional")
output <- outer(x,y,Curry(f,z=2))