2017-09-13 191 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

相关问题