我试图编写并应用一个看似简单的函数来标准化我的连续回归参数/预测变量。原因是我想处理多重共线性。
所以不是每次都写x-mean(x,na.rm=T)
,而是寻找一些更方便的东西,这对我有用 - 尤其是因为我想在R中练习写作函数;)
所以这就是我的尝试:
fun <- function(data.frame, x){
data.frame$x - mean(data.frame$x, na.rm=T)
}
显然这不是太错了。至少它不会返回错误消息。
但是,将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
我的猜测是它是关于我如何应用这个函数的,因为当我手动执行该函数应该做的事情时,它可以很好地工作。
另外,我正在寻找有关编写和应用此类函数的类似问题(也超出了堆栈交换领域),但我没有找到任何有用的信息。
希望我没有因为我的新手R技能而犯错误。
答案 0 :(得分:1)
R中已有一个功能可以执行您想要执行的操作:scale()
。
你可以写scale(mtcars$hp, center = TRUE, scale = FALSE)
,然后从矢量本身中减去矢量的平均值。
结合应用,这是强大的;例如,您可以通过编写以下内容来居中数据框的每一列:
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")
并在引号中指定变量名。这是因为$
运算符的特殊方式,您不能在其后使用字符串。