plot( dnorm , col='white')
polygon( dnorm, col='grey' )
返回上述错误消息,而不是plot
,而是polygon
。
body(polygon) %>% grep(pattern='numeric')
在第4行只找到一次,这似乎与此错误无关。所以我不知道在哪里寻找问题的根源。
答案 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
对于各种类型的对象没有这种类似的方法。