Ich sehe das Problem nicht, aber du könntest einfach das hier verwenden:
res <- (mtcars$drat-mean(mtcars$drat, na.rm=TRUE))/sd(mtcars$drat, na.rm=TRUE)
res[1:3]
#[1] 0.5675137 0.5675137 0.4739996
Oder schreibe deine eigenen Methoden:
scale.numeric <- scale.integer <- function (x, center = TRUE, scale = TRUE) {
if (is.logical(center)) {
if (center) {
center <- mean(x, na.rm = TRUE)
x <- x-center
}
}
else if (is.numeric(center) && (length(center) == 1))
x <- x-center
else stop("Ungültiger Wert für center")
if (is.logical(scale)) {
if (scale) {
f <- function(v) {
v <- v[!is.na(v)]
sqrt(sum(v^2)/max(1, length(v) - 1L))
}
scale <- f(x)
x <- x/scale
}
}
if (is.numeric(center))
attr(x, "scaled:center") <- center
if (is.numeric(scale))
attr(x, "scaled:scale") <- scale
x
}
res <- scale(mtcars$drat)
res[1:3]
#[1] 0.5675137 0.5675137 0.4739996
class(res)
#[1] "numeric"
Oder, etwas kürzer, aber etwas weniger effizient:
scale.numeric <- scale.integer <- function (x, center = TRUE, scale = TRUE) {
res <- scale.default(x, center, scale)
dim(res) <- NULL
res
}