在R中使用缩放功能后如何获取中心和缩放比例

时间:2018-07-08 05:47:58

标签: r scale stat

这似乎是一个愚蠢的问题,但是我已经在线搜索了,但仍然没有找到足够的答复。

我的问题是:假设我们有一个矩阵M,然后我们使用scale函数,如何通过编写一行代码来提取每一列的中心和比例(我知道我们可以看到中心和比例。 ),但我的矩阵中有很多列,因此只需手动进行即可。

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

您正在寻找attributes函数:

 set.seed(1)
 mat = matrix(rnorm(1000),,10) # Suppose you have 10 columns
 s = scale(mat) # scale your data
 attributes(s)#This gives you the means and the standard deviations:
$`dim`
[1] 100  10

$`scaled:center`
 [1]  0.1088873669 -0.0378080766  0.0296735350  0.0516018586 -0.0391342406 -0.0445193567 -0.1995797418
 [8]  0.0002549694  0.0100772648  0.0040650015

$`scaled:scale`
 [1] 0.8981994 0.9578791 1.0342655 0.9916751 1.1696122 0.9661804 1.0808358 1.0973012 1.0883612 1.0548091

这些值也可以通过以下方式获得:

 colMeans(mat)
 [1]  0.1088873669 -0.0378080766  0.0296735350  0.0516018586 -0.0391342406 -0.0445193567 -0.1995797418
 [8]  0.0002549694  0.0100772648  0.0040650015
 sqrt(diag(var(mat)))
 [1] 0.8981994 0.9578791 1.0342655 0.9916751 1.1696122 0.9661804 1.0808358 1.0973012 1.0883612 1.0548091

您将获得一个列表,可以按照自己的方式将其子集化:

或者您可以

attr(s,"scaled:center")
 [1]  0.1088873669 -0.0378080766  0.0296735350  0.0516018586 -0.0391342406 -0.0445193567 -0.1995797418
 [8]  0.0002549694  0.0100772648  0.0040650015

attr(s,"scaled:scale")
 [1] 0.8981994 0.9578791 1.0342655 0.9916751 1.1696122 0.9661804 1.0808358 1.0973012 1.0883612 1.0548091