如何在R中定义分段函数

Fra*_*ang 5 r function piecewise

我想用R定义一个分段函数,但是,我的R代码出错了.任何建议都是受欢迎的.

x<-seq(-5, 5, by=0.01)
  for (x in -5:5){
  if (-0.326 < x < 0.652) fx<- 0.632
  else if (-1.793<x<-1.304) fx<- 0.454  
  else if (1.630<x<2.119) fx<-0.227  
  else fx<- 0 }
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 15

试试这个:

x <- seq(-5, 5, 0.01)
fx <- (x > -0.326 & x <0.625) * 0.632 +
      (x > -1.793 & x < -1.304) * 0.454 +
      (x > 1.630 & x < 2.119) * 0.227
plot(x, fx)
Run Code Online (Sandbox Code Playgroud)


Rom*_*rik 12

或者你可以使用ifelse.

fx <- ifelse(x > -0.326 & x <0.625, 0.632,
   ifelse(x > -1.793 & x < -1.304,  0.454,
   ifelse(x > 1.630 & x < 2.119, 0.227, 0)))
Run Code Online (Sandbox Code Playgroud)


Ken*_*ams 12

我参加派对有点晚了,但我无法抗拒发布更多方法.两者都利用R功能来处理实线上的间隔.

如果在载体定义切点和函数值cutsvals像这样:

cuts <- c( -Inf, -1.793, -1.304, -0.326, 0.625, 1.630, 2.119 )
vals <- c(    0,  0.454,      0,  0.632,     0, 0.227,     0 )
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用findInterval有效地查找x切割点中的值:

fx <- vals[findInterval(x, c(-Inf, cuts))]
Run Code Online (Sandbox Code Playgroud)

如果这个函数需要做更高级的东西,而不仅仅是查找一个常量值,你可以放置表达式或函数或任何你想要的东西vals,可能使用list你想要的东西.

或者,由于此功能是步进功能,您可以使用stepfun:

f <- stepfun(cuts[-1], vals)
fx <- f(x)
Run Code Online (Sandbox Code Playgroud)

然后你也可以使用漂亮的绘图方法stepfun.