[英]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]
是沒有意義的。 (參見有關例外情況的評論。)
你可以嘗試lapply
: lapply(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.