给定两个值x
and b
,我想要一个函数来钳位x
落入[-b, b]
。尤其:
- If
x
小于或等于-b
,然后函数返回-b
;
- If
x
大于-b
并且小于b
,然后函数返回x
;
- If
x
大于或等于b
,然后函数返回b
.
在 R 中我写了以下函数truncfn
。此功能仅部分有效。我哪里做错了?有没有更简单的方法来做到这一点?
b <- 5
truncfn <- function(x){
if((x<(-b))||(x==-b)) -b
if((x>(-b))&&(x<b)) x
if((x>b)||(x==b)) b
}
truncfn(10)
5
truncfn(4)
truncfn(-10)
我会用pmin
and pmax
执行此操作的函数是单个表达式,无需if
声明:
b <- 5
x <- seq(-10, 10)
pmax(pmin(x, b), -b)
# [1] -5 -5 -5 -5 -5 -5 -4 -3 -2 -1 0 1 2 3 4 5 5 5 5 5 5
您可以通过替换第二个和第三个来修复您的功能if
声明与else if
语句(或交替使用return(b)
, return(x)
and return(-b)
)。这是一个工作版本(我冒昧地使用<=
而不是单独检查<
and ==
):
truncfn <- function(x){
if (x <= -b) -b
else if (x > -b && x < b) x
else b
}
truncfn(10)
# [1] 5
truncfn(4)
# [1] 4
truncfn(-10)
# [1] -5
但请注意,我用它编写的函数pmin
and pmax
可以将整个向量作为输入,而您的向量仅限于接受单个数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)