鉴于两个值x和b,我想一个函数来钳制x下跌中[-b, b].特别是:
x小于或等于-b,则函数返回-b;x大于-b且小于b,则函数返回x;x大于或等于b,则函数返回b.在RI中写了以下函数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)
Run Code Online (Sandbox Code Playgroud)
我会使用pmin和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
Run Code Online (Sandbox Code Playgroud)
您可以通过用if语句替换第二个和第三个else if语句(或者使用return(b),return(x)和return(-b))来修复您的函数.这是一个工作版本(我自由使用<=而不是单独检查<和==):
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
Run Code Online (Sandbox Code Playgroud)
但是请注意,功能我写的pmin,并pmax可以采取一个整体向量作为输入,而你仅限于采取单号.
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |