在R中使用scale函数后如何获得中心和比例

陈见聪*_*陈见聪 4 r scale stat

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

我的问题是:假设我们有一个矩阵M,那么我们使用该scale()函数,我们如何通过编写一行代码来提取每列的中心和比例尺(我知道我们可以看到中心和比例尺..),但是我的矩阵有很多列,手动完成很麻烦。

有任何想法吗?非常感谢!

Ony*_*mbu 5

你正在寻找的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
Run Code Online (Sandbox Code Playgroud)

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

 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
Run Code Online (Sandbox Code Playgroud)

你会得到一个列表,你可以按照你想要的方式子集:

或者你可以做

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
Run Code Online (Sandbox Code Playgroud)