R 使用*apply函数就地为数据帧变量分配属性

R 使用*apply函数就地为数据帧变量分配属性,r,dplyr,R,Dplyr,我想将属性“mean”设置为数据帧中所有变量的变量mean(实际上我正在将Stata文件中的适当属性应用于数据帧,但这本质上就是问题所在)。使用for循环,可以: test <- mtcars for(var in seq_along(test)) { attr(test[[var]], "name") <- mean(test[[var]]) } str(test) 'data.frame': 32 obs. of 11 variables: $ mpg : atom

我想将属性“mean”设置为数据帧中所有变量的变量mean(实际上我正在将Stata文件中的适当属性应用于数据帧,但这本质上就是问题所在)。使用
for
循环,可以:

test <- mtcars
for(var in seq_along(test)) {
  attr(test[[var]], "name") <- mean(test[[var]])
}

str(test)
'data.frame':   32 obs. of  11 variables:
 $ mpg : atomic  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
  ..- attr(*, "name")= num 20.1
 $ cyl : atomic  6 6 4 6 8 6 8 4 4 6 ...
  ..- attr(*, "name")= num 6.19

test与
for
循环不同,
*apply
函数在其词法范围内运行,而不是在全局环境中运行。我真的不知道这与
dplyr
有什么关系,但是你可以检查
数据表中的
setattr
函数。这是自相矛盾的:apply函数没有正确运行。如果您想避免复制数据帧,您的解决方案很好。
test <- mtcars
apply(test, 2, function(var) {
  attr(var, "name") <<- mean(var)
})

 mpg        cyl       disp         hp       drat            
 20.090625   6.187500 230.721875 146.687500   3.596563...   

str(test)
'data.frame':   32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...