r - 在 R 中列表的矩阵元素中应用函数

标签 r loops apply lapply mclapply

我在 R 中有一个元素列表,如下所示:

set.seed(123)
A <- matrix(rnorm(20 * 20, mean = 0, sd = 1), 20, 20)
B <- matrix(rnorm(20 * 20, mean = 0, sd = 1), 20, 20)
C <- matrix(rnorm(20 * 20, mean = 0, sd = 1), 20, 20)
D <- matrix(rnorm(20 * 20, mean = 0, sd = 1), 20, 20)
E <- matrix(rnorm(20 * 20, mean = 0, sd = 1), 20, 20)

DATA <- list(A,B,C,D,E)

我希望为每个矩阵(A,B,...,E)找到特征值并将它们组合在数据框中,如下所示:

ei1 <- eigen(DATA[[1]])
ei1 <- round(ei1$values, 2)
eigenvalues1 <- as.data.frame(ei1)

ei2 <- eigen(DATA[[2]])
ei2 <- round(ei2$values, 2)
eigenvalues2 <- as.data.frame(ei2)

ei3 <- eigen(DATA[[3]])
ei3 <- round(ei3$values, 2)
eigenvalues3 <- as.data.frame(ei3)

ei4 <- eigen(DATA[[4]])
ei4 <- round(ei4$values, 2)
eigenvalues4 <- as.data.frame(ei4)

ei5 <- eigen(DATA[[5]])
ei5 <- round(ei5$values, 2)
eigenvalues5 <- as.data.frame(ei5)

eigenavules <-
  cbind(eigenvalues1,eigenvalues2,eigenvalues3,eigenvalues4,eigenvalues5
  )

如何使用 apply (或类似)函数自动执行此过程,而不是像上面那样手动执行?

最佳答案

我们可以使用lapply来循环list并应用函数,提取eigen值,然后转换为数据。框架在最后

eigenvalues <- as.data.frame(do.call(cbind,
      lapply(DATA, function(x) round(eigen(x)$values, 2))))

-输出

> eigenvalues
            V1          V2          V3          V4          V5
1   1.77+3.73i  5.33+0.00i  5.11+0.00i -2.52+3.53i -1.87+4.42i
2   1.77-3.73i  1.72+4.13i -5.08+0.00i -2.52-3.53i -1.87-4.42i
3  -0.50+3.97i  1.72-4.13i  2.41+3.87i  2.12+3.32i  2.96+3.44i
4  -0.50-3.97i -4.02+1.85i  2.41-3.87i  2.12-3.32i  2.96-3.44i
5  -3.38+2.06i -4.02-1.85i -2.60+3.46i  3.72+0.00i -4.15+0.00i
6  -3.38-2.06i -3.27+0.00i -2.60-3.46i -3.16+0.30i  1.67+3.35i
7   3.89+0.00i  1.48+2.89i  0.10+3.78i -3.16-0.30i  1.67-3.35i
8  -2.47+3.00i  1.48-2.89i  0.10-3.78i  2.50+1.89i  3.28+1.47i
9  -2.47-3.00i  3.05+0.00i  3.74+0.00i  2.50-1.89i  3.28-1.47i
10  3.51+0.00i -0.97+2.79i  2.38+2.10i -2.69+1.46i -2.88+1.40i
11  2.04+2.29i -0.97-2.79i  2.38-2.10i -2.69-1.46i -2.88-1.40i
12  2.04-2.29i -1.86+2.07i -2.44+0.01i -1.04+2.51i -1.32+2.89i
13 -3.03+0.00i -1.86-2.07i -2.44-0.01i -1.04-2.51i -1.32-2.89i
14 -1.97+1.67i -2.18+0.00i -1.52+1.78i  0.69+2.32i -0.77+2.12i
15 -1.97-1.67i  2.14+0.00i -1.52-1.78i  0.69-2.32i -0.77-2.12i
16  0.81+1.91i  1.61+0.77i  1.93+0.86i  2.23+0.85i  1.40+1.09i
17  0.81-1.91i  1.61-0.77i  1.93-0.86i  2.23-0.85i  1.40-1.09i
18  1.02+0.00i  0.14+1.55i -0.04+1.88i -0.77+0.57i  0.65+0.35i
19 -0.57+0.47i  0.14-1.55i -0.04-1.88i -0.77-0.57i  0.65-0.35i
20 -0.57-0.47i -0.99+0.00i  0.26+0.00i  0.67+0.00i  0.58+0.00i

关于r - 在 R 中列表的矩阵元素中应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73238053/

相关文章:

r - 如何将年份转换为 %Y%m%d %H :%M:%S?

文件中的 Python 行?

JavaScript 通过 Z-index 在图像之间进行转换

javascript - 迭代数组时如何获得总数?

r - xts::apply 错误: "Error in coredata.xts(x) : currently unsupported data type"

r - NA 匹配 NA,但不等于 NA。为什么?

r - 对数据集中的多个配对列使用ivot_longer

python - 如何将应用函数链接到 pandas 数据框的子集

根据条件使用上一行替换值(使用 sapply 等函数)

r - 无法在R中读取MP3文件