【发布时间】:2015-02-27 12:59:32
【问题描述】:
我有一个这样的矩阵列表:
[[1]]
[,1] [,2] [,3]
[1,] 0.8 2.0 3.2
[2,] 2.0 3.2 4.4
[3,] 3.2 4.4 5.6
[[2]]
[,1] [,2] [,3]
[1,] -1.95 1.00 3.95
[2,] 1.00 3.95 6.90
[3,] 3.95 6.90 9.85
[[3]]
[,1] [,2] [,3]
[1,] -1.1 0.1 1.3
[2,] 0.1 1.3 2.5
[3,] 1.3 2.5 3.7
我想得到一个向量,其中只有列表中每个矩阵的特定行和列,行由向量选择。
我为此编写了一个代码:
xmin <- NULL
row <- c(2,3,2)
for(i in 1:3){
xmin[i] <- lista[[i]][row[i] , 1]
}
问题是我想以最有效的方式进行选择,并且我想避免 for 循环,如果可能的话,像 mapply 和 lapply 这样的函数,因为我必须调用这个函数数百万次。 mapply 的时序略逊于for 循环时序,但速度不够快。
是否有任何可能的方法来使用 R 基础选择功能([[、[ 或 $ 运算符)进行此子集化?
【问题讨论】:
-
您是否尝试过
mapply(function(x,y) x[y,1] , lista, row)或尝试行/列索引。rC <- cbind(row,1); mapply([, lista,lapply(split(rC, row(rC)), t)) -
另一个选项是
m1 <- do.call(rbind, lista); m1[cbind(row+seq(0,length(lista)*nrow(lista[[1]])-1, by=3),1)] #[1] 2.00 3.95 0.10
标签: r list matrix fuzzy-logic