假设您有一个函数f<- function(x,y,z) { ... }
。你会如何将常数传递给一个参数,但让其他参数变化?换句话说,我想做这样的事情:
output <- outer(x,y,f(x,y,z=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_int
和theta_int
中每个值组合的方差矩阵,使用该矩阵定义一个密度并在y
中定义的点中对其进行评估。我无法测试它,因为我不知道所涉及的变量的类型和尺寸。
答案 1 :(得分:2)
outer
(以及apply函数系列和其他函数)会将额外的参数传递给它们调用的函数。但是,如果您正在处理不支持此情况的情况(optim
是一个示例),那么您可以使用更通用的currying方法。咖喱函数就是创建一个新函数,其中(某些)变量已修复,因此参数较少。
library("functional")
output <- outer(x,y,Curry(f,z=2))