接
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)
是一个功能call。
为了使outer
循环在语法上正确,应使用Vectorize
创建矢量化函数,然后调用该新函数:
outer(-1:1,-1:1,function(x,y) Vectorize(cubeAndAdd)(x,y))
这里,Vectorize(cubeAndAdd)
是函数,并且您使用(x,y)作为参数来调用它:所以Vectorize(cubeAndAdd)(x,y)
(尽管只建议从function(x,y)
循环中删除整个匿名outer
的建议在这里起作用(并且使单线更短),但通常最好将显式的参数“馈送”给函数,因为您正在执行此操作,因为这允许使用期望附加参数的函数)。