我很好奇如何绘制这样定义的函数:
if(x < 1)
f(x) = x/10 * 1.2
if(x < 3)
f(x) = x/12 * 1.7
...
else
f(x) = x/15 * 2
如果函数很简单,比如f(x)= x / 10 * x / 5,则没有问题,可以使用curve()方法。但是我不确定处理更复杂功能的最佳方法是什么,如上所述。有任何想法吗?奖励积分,如果可以使用ggplot():)
答案 0 :(得分:8)
曲线仍有可能。 (当你阅读统计文献时,这个表述显示为I [x],“I”表示“指标”。)
curve( (x <1)*( (x/10)*1.2 ) + # one line for each case
(!(x <1)&(x<3) )*(x/12)*1.7 + # logical times (local) function
(x >=3)*(x/15)*2 ,
0,4) # limits
答案 1 :(得分:4)
您是否在寻找stepfun
之类的内容?
fn <- stepfun(c(1,2,3,4,5),c(0,1,2,3,4,5))
plot(fn,verticals = FALSE)
你指定函数的方式会有所不同,但是一旦你阅读了?stepfun
并自己绘制了一些例子,就很容易掌握。
答案 2 :(得分:4)
品味问题,但我更喜欢ifelse
而不是Dwins indicators(就像在mbq评论中一样)。比较:
curve(
(x <1) * ( (x/10)*1.2 ) +
(!(x <1)&(x<3) ) * ( (x/12)*1.7 ) +
(x >=3) * ( (x/15)*2 ) ,
0,4)
# versus
curve(
ifelse(x < 1, (x/10)*1.2,
ifelse(x < 3, (x/12)*1.7,
(x/15)*2 )),
0,4)