簡體   English   中英

從保存在R中多個列表的矩陣對角線中提取元素

[英]Extract elements from matrix diagonal saved in multiple lists in R

我正在嘗試從保存為列表的多個對角線中獲取不同的元素。 我的數據如下所示:

res <- list()
res[[1]] <- matrix(c(0.04770856,0.02854005,0.02854005,0.03260190), nrow=2, ncol=2)
res[[2]] <- matrix(c(0.05436957,0.04887182,0.04887182, 0.10484454), nrow=2, ncol=2)

> res
[[1]]
           [,1]       [,2]
[1,] 0.04770856 0.02854005
[2,] 0.02854005 0.03260190

[[2]]
           [,1]       [,2]
[1,] 0.05436957 0.04887182
[2,] 0.04887182 0.10484454

> diag(res[[1]])
[1] 0.04770856 0.03260190
> diag(res[[2]])
[1] 0.05436957 0.10484454

我想將給定列表的每個對角線的第一個和第二個元素保存到類似於此的向量中:

d.1st.el <- c(0.04770856, 0.05436957)
d.2nd.el <- c(0.03260190, 0.10484454)

我的問題是編寫為所有給定列表運行並獲取對角線的函數。 出於某種原因,當我使用unlist()提取給定級別的每個矩陣的值時,它不會得到數字,而是完整的矩陣。

有沒有人有一個簡單的解決方案?

sapply(res, diag)

           [,1]       [,2]
[1,] 0.04770856 0.05436957
[2,] 0.03260190 0.10484454

# or
lapply(res, diag)
[[1]]
[1] 0.04770856 0.03260190

[[2]]
[1] 0.05436957 0.10484454

如果出於某些原因想要在全局環境中使用向量:

alld <- lapply(res, diag)
names(alld) <- sprintf("d.%d.el", 1:length(alld))
list2env(alld, globalenv())

您可以分兩步執行以下操作:

# Step 1 - Get the diagonals
all_diags <- sapply(res, function(x) diag(t(x)))

print(all_diags)

           [,1]       [,2]
[1,] 0.04770856 0.05436957
[2,] 0.03260190 0.10484454

# Step 2 - Append to vectors

d.1st.el <- all_diags[1,]
d.2nd.el <- all_diags[2,]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM