R-应用函数不适用于其他参数中心和小数位数上的小数位数函数



正如我们所知,内置的scale()函数输入一个矩阵(或数字数据帧(,并计算每列的z分数。scale()的输出是一个矩阵对象,它具有称为"scaled:center""scaled:scale"的附加属性,分别包含计算z分数时使用的平均值和标准差。现在我有一个名为trees的示例数据帧,来自RStudio环境中的"package:datasets",例如

> trees
Girth Height Volume
1    8.3     70   10.3
2    8.6     65   10.3
3    8.8     63   10.2
4   10.5     72   16.4
5   10.7     81   18.8
6   10.8     83   19.7

现在我需要使用scale()函数来计算trees数据集中每个变量的z分数,我尝试只使用带有以下额外参数的scale()函数,它可以完美地进行

test1 <- scale(trees, center = TRUE, scale = TRUE)
attributes(test1)

您可以看到基于可选参数centerscale的新添加属性,如下所示:

$`scaled:center`
Girth   Height   Volume 
13.24839 76.00000 30.17097 
$`scaled:scale`
Girth    Height    Volume 
3.138139  6.371813 16.437846 

但是,当我在apply函数中尝试scale函数时,结果是在没有新属性的情况下,这些新属性假设与上述相同,请帮助弄清楚为什么以及如何使scale函数与apply一起工作。

test2 <- apply(trees, 2, scale, center = TRUE, scale = TRUE)
attributes(test2) # No attribute comes out

我们也可以使用purrr中的map

library(purrr)
map(trees, scale, center = TRUE, scale = TRUE)

apply返回与所用MARGIN相同维度的输出。请改用lapply,它将返回一个列表。

test2 <- lapply(trees, scale, center = TRUE, scale = TRUE)
attributes(test2[[1]])
#$dim
#[1] 31  1
#$`scaled:center`
#[1] 13.25
#$`scaled:scale`
#[1] 3.138

相关内容

  • 没有找到相关文章

最新更新