Writing/applying "subtract the mean"-标准化回归参数的函数

Writing/applying "subtract the mean"-function to standardize regression parameters

我试图编写并应用一个看似简单的函数来标准化我的连续回归参数/预测变量。原因是我想处理多重共线性。

因此,我不是每次都写 x-mean(x,na.rm=T),而是在寻找更方便的东西来完成这项工作——尤其是因为我想在 R 中练习编写函数。;)

所以这是我尝试过的:

fun <- function(data.frame, x){
data.frame$x - mean(data.frame$x, na.rm=T)
}

显然这并没有错。至少它没有 return 错误消息。

但是,将 fun 应用到内置 mtcars 数据集和变量 disp 会产生此错误消息:

#Loading the data:
 data("mtcars")

fun(mtcars,x=disp) #I tried several ways, e.g. w and w/o "mtcars" in front

Warning message:
 In mean.default(mtcars$x, na.rm = T) :
  argument is not numeric or logical: returning NA

我的猜测是关于我如何应用该函数,因为当我手动执行该函数应该执行的操作时,它运行完美。

此外,我一直在寻找有关编写和应用此类函数的类似问题(也在 Stack Exchange 领域之外),但我没有找到任何有用的信息。

希望我没有因为我的新手 R 技能而犯错误。

R 中已经有一个函数可以执行您想要执行的操作:scale()。 你可以只写 scale(mtcars$hp, center = TRUE, scale = FALSE) ,然后从向量本身减去向量的平均值。

与apply结合使用,功能强大;例如,您可以通过以下方式将数据框的每一列居中:

apply(dataframe, MARGIN = 2, FUN = scale, center = TRUE, scale = FALSE)

在执行此操作之前,您必须确保这是对您的列有效的函数。例如,您不能缩放因子或字符。

关于您的问题:您的函数应该如下所示:

fun <- function(data.frame, x){
  data.frame[[x]] - mean(data.frame[[x]], na.rm=T)
}

然后在指定函数时,您必须编写 fun(mtcars, "hp") 并在引号中指定变量名称。这是因为 $ 运算符的特殊工作方式,不能在其后使用字符串。