r语言 - 我已经矢量化了一个自定义函数,为什么外部给我一个错误?



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)的建议在这里有效(并使单行更短(,但通常最好像您所做的那样将参数显式"馈送"到函数,因为这允许使用需要其他参数的函数(。

相关内容

最新更新