不能强制类型'闭包'到'double'类型的矢量(多边形)

时间:2015-02-24 19:49:24

标签: r graphics

plot( dnorm , col='white')
polygon( dnorm, col='grey' )

返回上述错误消息,而不是plot,而是polygon


body(polygon) %>% grep(pattern='numeric')在第4行只找到一次,这似乎与此错误无关。所以我不知道在哪里寻找问题的根源。

3 个答案:

答案 0 :(得分:2)

plot有一个函数方法,而polygon没有。来自?plot

  

x:图中点的坐标。或者,可以提供单个绘图结构,功能或任何带有绘图方法的R对象。

此外,从?plot.function,S3方法绘制函数:

## S3 method for class 'function'
plot(x, y = 0, to = 1, from = y, xlim = NULL, ylab = NULL, ...)

这解释了当您将plot作为参数传递时,为什么使用dnorm得到值为0到1的图表。

注意dnorm之类的函数也称为闭包。这解释了为什么您使用polygon收到错误的原因。由于polygon不接受函数作为参数,它会尝试将dnorm(闭包)转换为向量,但这不是有效的转换。

polygon中的as.double实际上xy.coord内的> polygon(dnorm) Error in as.double(y) : cannot coerce type 'closure' to vector of type 'double' > traceback() 2: xy.coords(x, y) 1: polygon(dnorm) 调用中发生了错误:

as.double

注意xy.coords没有在跟踪堆栈中注册,因为它是一个原语。通过查看> as.double(dnorm) Error in as.double(dnorm) : cannot coerce type 'closure' to vector of type 'double' 的来源,您可以看到错误发生的位置。要半确认:

dnorm(-3:3)

polygon实际上会生成一个数字向量,这就是{{1}}的原因。

答案 1 :(得分:0)

您需要polygon( dnorm(-3:3) )xlim限制。 polygon缺少一种处理函数的方法(尽管plot有一个)。

答案 2 :(得分:0)

对plot的调用将解析为不同类型对象的各种默认方法。有关您环境中的列表,请参阅methods(plot)。对于dnorm,它是plot.function,它将函数作为参数,并为函数提供一组输入。顺便提一下,这也适用于rnorm,因为plot.function提供了默认参数n=101

plot.function的一个更常见的别名是curve

curve(dnorm, col="grey")

polygon对于各种类型的对象没有这种类似的方法。