2017-09-13 157 views
2

我有一個矩陣列表如下。從列表中提取元素給出在另一個列表中的位置

listMat <- list(A=matrix(1:9, ncol=3), B=matrix(10:18, ncol=3)) 
listMat 

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

$B 
    [,1] [,2] [,3] 
[1,] 10 13 16 
[2,] 11 14 17 
[3,] 12 15 18 

我想提取1日和矩陣A的第2列,這些位置在列表中給出B. 的第三列。

listPosition <- list(A=c(1,2), B=c(1)) 
listPosition 
$A 
[1] 1 2 

$B 
[1] 1 

有沒有一種方法來提取元素,而不是使用以下命令

listMat[["A"]][,1:2] 
    listMat[["B"]][,1] 

回答

3

我們可以使用Map以提取list相應matrix元素使用指數listPosition

Map(function(x, y) x[, y, drop = FALSE], listMat, listPosition) 
3
sapply(names(listMat), function(x) listMat[[x]][,listPosition[[x]], drop = FALSE]) 
#$A 
#  [,1] [,2] 
#[1,] 1 4 
#[2,] 2 5 
#[3,] 3 6 

#$B 
#  [,1] 
#[1,] 10 
#[2,] 11 
#[3,] 12 
+0

此答案更正確比第一個。例如,如果listPosition < - list(A = c(1,2)),那麼第二個答案會給出正確的結果。 – user7892705

相關問題