R 操作矩阵和计算SVD的基本操作记录

在R中可以用函数matrix()来创建一个矩阵,应用该函数时需要输入必要的参数值。 > args(matrix) function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) data项为必要的矩阵元素,nrow为行数,ncol为列数,注意nrow与ncol的乘积应为矩阵元素个数,byrow项控制排列元素时是否按行进行,dimnames给定行和列的名称。

a<-c(3,4,9,8,3,55,2,334)

m<-matrix(a, byrow=T, nrow=2)

m

也可以用scan(),如a=scan()

m<-matrix(a, byrow=F, nrow=21)

> m
[,1] [,2]
[1,] -0.2504222 -0.06554779
[2,] -0.1280644 -0.56722128
[3,] 0.5754956 -0.19835075
[4,] 1.1872865 -0.66520250
[5,] 0.9425697 -1.04680095
[6,] 0.8813910 -1.12941258
[7,] 0.9349228 -0.33907873
[8,] 1.0037492 -0.75525877
[9,] 0.9655123 -1.17696225
[10,] 0.9043332 -1.14958515
[11,] 0.8584489 -0.80593043
[12,] 0.8049172 -0.70290605
[13,] 0.7743276 -0.33643707
[14,] 0.5831430 -0.22836956
[15,] 0.4378426 0.70245203
[16,] 0.4378426 1.08645184
[17,] 0.6596168 0.90105613
[18,] 0.2313632 1.39240301
[19,] -0.3498382 1.02113127
[20,] -0.8010340 1.67097731
[21,] -1.2675246 -0.09796806


mean(x)和var(x),分别计算样本均值和样本方差,这两个函数分别相当于sum(x)/length(x),sum((x-mean(x)) ^2)/(length(x) -1)。如果var()的参数是一个n*p的矩阵,那么函数的值是一个p*p的样本协方差矩阵,认为每行是一个p变量的样本向量。

因此求解协方差可以为
var(m)

> var(m)
[,1] [,2]
[1,] 0.4244522 -0.3229035
[2,] -0.3229035 0.7926980


将其赋值给n
n<-m
svd(n)即可求得svd值

> svd(n)

$d
[1] 0.9802846 0.2368656

$u
[,1] [,2]
[1,] -0.5023242 0.8646794
[2,] 0.8646794 0.5023242

$v
[,1] [,2]
[1,] -0.5023242 0.8646794
[2,] 0.8646794 0.5023242

另外可见:
http://www.cnblogs.com/einyboy/p/3182589.html
http://www.biostatistic.net/thread-2522-1-1.html
http://blog.csdn.net/u013259893/article/details/40483189
原文地址:https://www.cnblogs.com/bnuvincent/p/5896331.html