我有以下代码:
library("ggplot2")
f <- function(x)
{
if (x >= 2) {-1 + x + 0.3}
else {0}
}
graph <- ggplot(data.frame(x = c(0, 10)), aes(x))
graph <- graph + stat_function(fun=f)
print(graph)
意外地产生了以下图表:
但是当我自己使用该函数时,结果是预期的:
> f(1)
[1] 0
>
> f(3)
[1] 2.3
>
> f(7)
[1] 6.3
怎么回事?
答案 0 :(得分:5)
请注意以下警告:
> f(c(0,10))
[1] 0
Warning message:
In if (x >= 2) { :
the condition has length > 1 and only the first element will be used
c(0,10)
中的第一个元素不大于或等于2,并且由于您的函数不是设计为对值向量进行操作,因此它仅评估第一个元素并返回单个{{1} } - 这是您对0
的调用所显示的内容。这实际上给出了与上面相同的警告信息:
print(graph)
您只需要对您的函数进行矢量化:
> plot(graph)
Warning message:
In if (x >= 2) { :
the condition has length > 1 and only the first element will be used