如何为 R 中的特征值调整此数据结构?
How to adjust this data structure for eigen in R?
我有一个校正矩阵列表 [1:1505, 1:1505]
。
我在考虑如何针对 R 中的 Eigen
调整它们。
最初的线程 只有一个测试函数 cor
最终不够用,所以这里是第二个测试函数 - cor 矩阵
的 Eigen
#
set.seed(24)
A=541650
m1 <- matrix(1:A, ncol=4, nrow=A)
a=360; b=1505; c=4;
m2 <- array(`length<-`(m1, a*b*c), dim = c(a,b,c))
res <- lapply(seq(dim(m2)[3]), function(i) cor(m2[,,i]))
res2 <- lapply(res, function(x) eigen(replace(x, is.na(x), 0))$vectors[,1:2])
str(res2)
e1 <- res[,1]
e2 <- res[,2]
输出
List of 4
$ : num [1:1505, 1:2] -0.0144 0.0512 0.0157 -0.0232 0.0248 ...
$ : num [1:1505, 1:2] 0.02233 0.00977 -0.02361 0.01597 0.00115 ...
$ : num [1:1505, 1:2] -0.005876 0.000417 0.008206 0.006237 0.01514 ...
$ : num [1:1505, 1:2] 0.00844 0.04382 0.0203 0.0348 0.02553 ...
Error in res2[, 1] : incorrect number of dimensions
Execution halted
R: 3.3.1
OS:Debian 8.5
我认为完整的功能代码如下,基于 akrun 的初始答案、他的评论和一些迭代
#
set.seed(24)
A=541650
m1 <- matrix(1:A, ncol=4, nrow=A)
a=360; b=1505; c=4;
#
m2 <- array(`length<-`(m1, a*b*c), dim = c(a,b,c))
res <- lapply(seq(dim(m2)[3]), function(i) cor(m2[,,i]))
res2 <- lapply(res, function(x) eigen(replace(x, is.na(x), 0))$vectors[,1:2])
str(res2)
e1 <- res[1]
e2 <- res[2]
str(e1)
str(e2)
输出
List of 4
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
List of 1
$ : num [1:1505, 1:1505] 1 1 1 1 1 1 1 1 1 1 ...
List of 1
$ : num [1:1505, 1:1505] 1 1 1 1 1 1 1 1 1 1 ...
我有一个校正矩阵列表 [1:1505, 1:1505]
。
我在考虑如何针对 R 中的 Eigen
调整它们。
最初的线程 cor
最终不够用,所以这里是第二个测试函数 - cor 矩阵
Eigen
#
set.seed(24)
A=541650
m1 <- matrix(1:A, ncol=4, nrow=A)
a=360; b=1505; c=4;
m2 <- array(`length<-`(m1, a*b*c), dim = c(a,b,c))
res <- lapply(seq(dim(m2)[3]), function(i) cor(m2[,,i]))
res2 <- lapply(res, function(x) eigen(replace(x, is.na(x), 0))$vectors[,1:2])
str(res2)
e1 <- res[,1]
e2 <- res[,2]
输出
List of 4
$ : num [1:1505, 1:2] -0.0144 0.0512 0.0157 -0.0232 0.0248 ...
$ : num [1:1505, 1:2] 0.02233 0.00977 -0.02361 0.01597 0.00115 ...
$ : num [1:1505, 1:2] -0.005876 0.000417 0.008206 0.006237 0.01514 ...
$ : num [1:1505, 1:2] 0.00844 0.04382 0.0203 0.0348 0.02553 ...
Error in res2[, 1] : incorrect number of dimensions
Execution halted
R: 3.3.1
OS:Debian 8.5
我认为完整的功能代码如下,基于 akrun 的初始答案、他的评论和一些迭代
#
set.seed(24)
A=541650
m1 <- matrix(1:A, ncol=4, nrow=A)
a=360; b=1505; c=4;
#
m2 <- array(`length<-`(m1, a*b*c), dim = c(a,b,c))
res <- lapply(seq(dim(m2)[3]), function(i) cor(m2[,,i]))
res2 <- lapply(res, function(x) eigen(replace(x, is.na(x), 0))$vectors[,1:2])
str(res2)
e1 <- res[1]
e2 <- res[2]
str(e1)
str(e2)
输出
List of 4
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
$ : num [1:1505, 1:2] -0.0258 -0.0258 -0.0258 -0.0258 -0.0258 ...
List of 1
$ : num [1:1505, 1:1505] 1 1 1 1 1 1 1 1 1 1 ...
List of 1
$ : num [1:1505, 1:1505] 1 1 1 1 1 1 1 1 1 1 ...