Take
cubeAndAdd<-function(x,y){x^3+y^3}
outer(-1:1,-1:1,function(x,y) Vectorize(cubeAndAdd(x,y)))
运行此操作后,您将收到警告消息:
Warning message:
In formals(fun) : argument is not a function
这是为什么呢?毕竟,如果我真的没有使用函数,那么这段代码根本就无法运行。
问题来自你"喂"给Vectorize
什么。
Vectorize
想要一个函数作为它的参数。cubeAndAdd
是一个函数,但cubeAndAdd(x,y)
是一个函数调用。
若要使outer
循环在语法上正确,应使用Vectorize
创建矢量化函数,然后调用该新函数:
outer(-1:1,-1:1,function(x,y) Vectorize(cubeAndAdd)(x,y))
在这里,Vectorize(cubeAndAdd)
函数,你使用 (x,y( 作为参数调用它:所以Vectorize(cubeAndAdd)(x,y)
(尽管从outer
循环中删除整个匿名function(x,y)
的建议在这里有效(并使单行更短(,但通常最好像您所做的那样将参数显式"馈送"到函数,因为这允许使用需要其他参数的函数(。