4

xとの 2 つの値が与えられ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)
4

2 に答える 2

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

if2 番目と 3 番目のステートメントを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

ただし、私が書いた関数は入力としてベクトル全体を受け取ることができますが、あなたの関数は単一の数値しかとれないことpminに注意してください。pmax

于 2015-09-16T04:31:12.497 に答える