我正在努力制作一个重新缩放的功能 位于两个参数lower和upper之间的向量。 重新缩放是通过线性变换完成的。
# rescales x to lie between lower and upper
rescale <- function(x, lower = 0, upper = 1){
slope <- (upper-lower)/(which.max(x)-which.min(x))
intercept <- slope*(x-which.max(x))+upper
y <- intercept + slope * x
return(list(new = y, coef = c(intercept = intercept, slope = slope)))
}
我感觉我没有走上正轨。 请给我一些建议,使其正确。
答案 0 :(得分:2)
这是一个基于此相关Q&A中的逻辑的函数:
rescale <- function(x, from, to) {
maxx <- max(x)
minx <- min(x)
out <- (to - from) * (x - minx)
out <- out / (maxx - minx)
out + from
}
> rescale(1:10, 2, 5)
[1] 2.000000 2.333333 2.666667 3.000000 3.333333 3.666667 4.000000 4.333333
[9] 4.666667 5.000000
请注意,如果min(x) == max(x)
我们将在函数的倒数第二行除以0,则无效。