簡體   English   中英

矩陣列表上的R冒號運算符

[英]R colon operator on list of matrices

我在R中創建了一個矩陣列表。在列表的所有矩陣中,我想“拉出”特定索引的矩陣元素集合。 我當時認為冒號運算符可能允許我在一行中實現它。 例如,這是嘗試訪問列表中所有矩陣的[1,1]元素:

myList = list() #list of matrices
myList[[1]] = matrix(1:9, nrow=3, ncol=3, byrow=TRUE) #arbitrary data
myList[[2]] = matrix(2:10, nrow=3, ncol=3, byrow=TRUE)

#I expected the following line to output myList[[1]][1,1], myList[[2]][1,1]
slice = myList[[1:2]][1,1] #prints error: "incorrect number of dimensions"

上面代碼的最后一行會引發錯誤“維數不正確”。

作為參考,這是我正在嘗試做的工作(但不太優雅)的實現:

#assume myList has already been created (see the code snippet above)
slice = c()
for(x in 1:2) {
    slice = c(slice, myList[[x]][1,1])
}
#this works. slice = [1 2]

有誰知道如何在一行中完成上述操作?

請注意,我的“矩陣列表”可以替換為其他內容。 如果有人可以建議一個允許我執行上述操作的替代“矩陣集合”數據結構,那么這將得到解決。

也許這個問題很愚蠢......我真的希望有一個干凈的單線實現。

兩件事情。 首先, [[[ 來自?'['的相關句子:

[,[[和$]之間最重要的區別是[可以選擇多個元素,而另外兩個選擇單個元素。

所以你可能想做myList[1:2] 其次,您無法以您描述的方式組合子集化操作。 完成myList[1:2]您將獲得兩個矩陣的列表。 列表通常只有一個維度,因此在您的情況下執行myList[1:2][1,1]是沒有意義的。 (參見有關例外情況的評論。)

你可以嘗試lapplylapply(myList,'[',1,1)

如果您的矩陣都具有相同的尺寸,您可以將它們存儲在三維數組中。 這肯定會使索引和提取元素更容易......

## One way to get your data into an array
a <- array(c(myList[[1]], myList[[2]]), dim=c(3,3,2))

## Extract the slice containing the upper left element of each matrix
a[1,1,]
# [1] 1 2

這有效:

> sapply(myList,"[",1,1)
[1] 1 2

編輯:哦,對不起,我在早期答案結束時看到幾乎相同的想法。 但無論如何,sapply可能更接近你想要的東西

暫無
暫無

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

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