我试图在同一个图表上绘制两个函数(即2x + 1和3x - 0.5 * x ^ 2)的图形,但是有两个不同的范围(分别为x <= 3和x> 3) )。到目前为止,我已经定义了两个函数如下:
# Define first function with given range
Line1 <- function(x) {
if (x <= 3) {
(3*x) + 1 } else {
}
}
# Define second function with given range
Line2 <- function(x) {
if (x > 3) {
2*x - (0.5*(x^2)) } else {
}
}
# Plot functions
ggplot(d,aes(x=x)) + stat_function(fun=rwrap(Line1,0,3),geom="line",col="blue")
+ stat_function(fun=rwrap(Line2,3,5),geom="line",col="red")`
当我运行代码时,收到以下错误消息:
错误:提供给连续刻度的离散值另外:
警告讯息:
1:在if(x <= 3){:条件具有长度> 1 并且只使用第一个元素 2:在if(x> 3){:the 条件的长度> 1,只使用第一个元素
我试图对其进行排查,但此时我只是迷失了方向。
答案 0 :(得分:0)
问题是你的功能没有矢量化。他们将在x
处使用单个值,但Line1(0:10)
将不起作用。
使用ifelse
if{}else{}
的矢量化版本制作单个矢量化函数:
foo = function(x) {
ifelse(x <= 3, 3 * x + 1, 2 * x - 0.5 * x ^ 2)
}
你可以这样打破它:
bar = function(x) 3 * x + 1
baz = function(x) 2 * x - 0.5 * x^2
foo = function(x) ifelse(x <= 3, bar(x), baz(x))
当然,您可能希望使用比这些占位符更有意义的名称。