簡體   English   中英

使用向量列表從矩陣列表中選擇一列

[英]Select a column from a list of matrices using a list of vectors

我想使用代表每個矩陣列的布爾向量列表從不同維度的矩陣列表中選擇列。

我嘗試了不同的map(s|l)apply組合,甚至是經典的for循環,但我無法選擇列。

使用此代碼,您可以生成矩陣和布爾向量列表以進行實驗:

matrices <- list(matrix(c(7,8,9,10), nrow=1), matrix(c(7,8,7,9,7,10,8,9,8,10,9,10), nrow=2), matrix(c(7,8,9,7,8,10,7,9,10,8,9,10), nrow=3))
listOfColumns <- list(c(FALSE,FALSE,FALSE,FALSE), c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE), c(TRUE,FALSE,FALSE,FALSE))

例如,使用上述代碼創建矩陣列表:

[[1]]
     [,1] [,2] [,3] [,4]
[1,]    7    8    9   10

[[2]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    7    7    7    8    8    9
[2,]    8    9   10    9   10   10

[[3]]
     [,1] [,2] [,3] [,4]
[1,]    7    7    7    8
[2,]    8    8    9    9
[3,]    9   10   10   10

和布爾向量列表:

[[1]]
[1] FALSE FALSE FALSE FALSE

[[2]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE

[[3]]
[1]  TRUE FALSE FALSE FALSE

結果應該是一個包含單個元素的列表:

[[1]]
[1] 7 8 9

因為您的列表包含您根本不想保留的矩陣,所以我們可以首先創建一個索引向量,該向量僅選擇listOfColumns中至少有一個TRUE列表元素

(idx <- sapply(listOfColumns, any))
# [1] FALSE FALSE  TRUE

接下來我們使用Map對剩余矩陣進行子集化

Map(function(x, cols) x[, cols], x = matrices[idx], cols = listOfColumns[idx])
#[[1]]
#[1] 7 8 9

感謝@thelatemail 的有用評論。

暫無
暫無

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

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