2014-10-01 16 views
1

我如何转换转型从载体到邻近对角矩阵

xm<-matrix(c(.1,.2,1),ncol=1) 

nd_ylwij 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] 
[1,] 0.1 0.0 0.0 0.2 0.0 0.0 1 0 0 
[2,] 0.0 0.1 0.0 0.0 0.2 0.0 0 1 0 
[3,] 0.0 0.0 0.1 0.0 0.0 0.2 0 0 1 

这是不行的,我不知道为什么

lapply(as.list(xm),diag) 

回答

2

你可以做:

do.call(cbind, lapply(xm, `*`, diag(length(xm)))) 
+0

是的,这是有效的。我是小白。你能给我一个关于这个命令行的叙述吗?我的解释是xm [i] * diag(length(xm))的列绑定。是对的吗? – user3969377 2014-10-01 13:18:32

+0

或'do.call(cbind,lapply(xm,diag,length(xm)))' – 2014-10-01 13:21:54

+0

当然,'lapply'需要每个元素并将其乘以(* *是乘法函数)与3乘3单位矩阵('diag(length(xm))'),返回一个矩阵列表。 'do.call(cbind,...)'将它们并排放入一个宽矩阵中。 – flodel 2014-10-01 13:43:14