r - 按行而不是按列用向量填充下矩阵

标签 r matrix covariance

我试图读取由LISREL以下列格式在纯文本,空格分隔的文件中写出的方差-协方差矩阵:

 0.23675E+01  0.86752E+00  0.28675E+01 -0.36190E+00 -0.36190E+00  0.25381E+01
-0.32571E+00 -0.32571E+00  0.84425E+00  0.25598E+01 -0.37680E+00 -0.37680E+00
 0.53136E+00  0.47822E+00  0.21120E+01 -0.37680E+00 -0.37680E+00  0.53136E+00
 0.47822E+00  0.91200E+00  0.21120E+01

这实际上是一个较低的对角矩阵(包括对角线):
 0.23675E+01  
 0.86752E+00  0.28675E+01 
-0.36190E+00 -0.36190E+00  0.25381E+01
-0.32571E+00 -0.32571E+00  0.84425E+00  0.25598E+01 
-0.37680E+00 -0.37680E+00  0.53136E+00  0.47822E+00  0.21120E+01 
-0.37680E+00 -0.37680E+00  0.53136E+00  0.47822E+00  0.91200E+00  0.21120E+01

我可以使用scan()read.table(fill=T)正确读取值。

但是,我无法正确将读取的向量存储在矩阵中。以下代码
S <- diag(6)
S[lower.tri(S,diag=T)] <- d

按列填充下部矩阵,而应按行填充。

使用matrix()确实允许使用byrow=TRUE选项,但这将填充整个矩阵,而不仅是下半部分(对角线)。

可能同时存在两种情况:仅填充下部矩阵(带有对角线),然后逐行进行吗?

(我遇到的另一个问题:LISREL使用'D + 01',而R仅将'E + 01'识别为科学计数法。您可以在R中将其更改为也接受'D'吗?)

最佳答案

只需将其读入上部的三角形部分,而不是下部的部分即可:

S <- diag(6)
S[upper.tri(S, diag=TRUE)] <- d
t(S)

关于r - 按行而不是按列用向量填充下矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5319407/

相关文章:

r - R中不同时间序列数据值的互相关

matlab - MATLAB 中矩阵的分块向量求和

iphone - 在 iOS 中显示像素矩阵的最佳方式

scala - 如何初始化协变变量?

c# - T 必须逆变有效

r - 使用 dplyr 链从因子标签中去除尾随空格

r - 如何使用 R 包 purrr 中的函数重现循环

r - 一种将不同长度的命名向量合并到 R 中的数据框(将名称信息保留为列名)的快速方法

c++ - C++ 中的字符矩阵?

c# - C# 4.0 中如何实现泛型协变和逆变?