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功能来处理实线上的间隔.
如果在载体定义切点和函数值cuts和vals像这样:
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.
| 归档时间: |
|
| 查看次数: |
23142 次 |
| 最近记录: |