我已经向量化了一个自定义函数,为什么外部给我一个错误?

问题描述 投票:1回答:1

  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

为什么?毕竟,如果我确实没有使用函数,那么该代码将根本无法运行。

r vectorization
1个回答
1
投票

错误来自您向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的建议在这里起作用(并且使单线更短),但通常最好将显式的参数“馈送”给函数,因为您正在执行此操作,因为这允许使用期望附加参数的函数)。

© www.soinside.com 2019 - 2024. All rights reserved.