“有条件的”情节

时间:2011-09-10 20:16:27

标签: r plot

我很好奇如何绘制这样定义的函数:

 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():)

3 个答案:

答案 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

enter image description here

答案 1 :(得分:4)

您是否在寻找stepfun之类的内容?

fn <- stepfun(c(1,2,3,4,5),c(0,1,2,3,4,5))
plot(fn,verticals = FALSE)

enter image description here

你指定函数的方式会有所不同,但是一旦你阅读了?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)