R中的3节变换函数

时间:2016-01-05 09:26:11

标签: r function if-statement transformation

我希望这个问题是新的,因为我找不到适合我的解决方案。

我有一个向量x,可以填充任何实数。此向量中的元素应按以下方式通过函数进行转换:

x = 0,如果x <0。一个

x =(x-a)/(b-a),如果a&lt; = x&lt; = b

x = 1,如果x> B'/ P>

这是我提出的功能:

transf <- function(x, a = 0, b = 1){
  if(a > b) stop("\nThe lower bound must be smaller than the upper bound!")

  if(x < a){
    y = 0
  }
  else if(a <= x <= b){
    y = (x-a)/(b-a)
  }
  else{
    y = 1
  }
  return(y)
  print(y)
}

我收到了一堆我无法完全放在一起的错误消息。我也尝试用一个简单的if替换else if和else,但是这也没有用。

非常感谢任何有关如何解决这个问题的帮助

1 个答案:

答案 0 :(得分:1)

我使用逻辑索引:

i.low <- x < a
i.mid <- x >= a & x <= b
i.high <- x > b
x[i.low] <- 0
x[i.mid] <- (x[i.mid] - a) / (b - a)
x[i.high] <- 1

您的原始帖子没有说出错误是什么,但我猜你是在传递矢量作为你的函数参数而错误是抱怨“条件长度> 1且只有第一个元素将是用过的”。这是因为你正在测试逻辑向量的条件。