我希望这个问题是新的,因为我找不到适合我的解决方案。
我有一个向量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,但是这也没有用。
非常感谢任何有关如何解决这个问题的帮助
答案 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且只有第一个元素将是用过的”。这是因为你正在测试逻辑向量的条件。