如果每个元素指定列和行的 R 子集元素
R subset elements specifying column and row if each element
我应该如何对同时指定每个项目的行和列的矩阵进行子集化?我目前正在使用 sapply
,但我觉得它不是特别优雅:
> mat <- data.frame(a=c(1,2,3),b=c(7,6,5))
> mat
a b
1 1 7
2 2 6
3 3 5
> rowSel <- 1:3
> colSel <- c(1,2,1)
> sapply(rowSel,function(i){mat[i,colSel[i]]})
[1] 1 6 3
更短的方式:
mat[cbind(rowSel, colSel)]
#[1] 1 6 3
这使用双列矩阵的索引。第一列包含行的索引,第二列包含列的索引。双列矩阵的每一行索引矩阵的一个元素 mat
.
我应该如何对同时指定每个项目的行和列的矩阵进行子集化?我目前正在使用 sapply
,但我觉得它不是特别优雅:
> mat <- data.frame(a=c(1,2,3),b=c(7,6,5))
> mat
a b
1 1 7
2 2 6
3 3 5
> rowSel <- 1:3
> colSel <- c(1,2,1)
> sapply(rowSel,function(i){mat[i,colSel[i]]})
[1] 1 6 3
更短的方式:
mat[cbind(rowSel, colSel)]
#[1] 1 6 3
这使用双列矩阵的索引。第一列包含行的索引,第二列包含列的索引。双列矩阵的每一行索引矩阵的一个元素 mat
.