R具有逻辑矩阵的子集向量

wtr*_*trs 6 r list subset apply sapply

我想用以下方式用逻辑矩阵对数值向量进行子集化:给定向量y

y <- c(4,8,1,3,5,7)
Run Code Online (Sandbox Code Playgroud)

和逻辑矩阵lmat

lmat <- t(matrix(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE,  FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE,  FALSE, FALSE, FALSE, FALSE,
TRUE,  TRUE,  FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE,  TRUE, FALSE, FALSE, FALSE,
TRUE,  FALSE,  TRUE, FALSE, FALSE, FALSE),  ncol = 6))
Run Code Online (Sandbox Code Playgroud)

看起来像这样

> lmat
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]
[1,] FALSE FALSE FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE  TRUE FALSE FALSE FALSE FALSE
[4,]  TRUE  TRUE FALSE FALSE FALSE FALSE
[5,] FALSE FALSE  TRUE FALSE FALSE FALSE
[6,]  TRUE FALSE  TRUE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我想应用一些函数x(),它根据lmat的行子集y并返回一个列表.所以x(y)会返回:

[[1]]
numeric(0)

[[2]]
[1] 4 9

[[3]]
[1] 8

[[4]]
[1] 4 8 9

[[5]]
[1] 1

[[6]]
[1] 4 1 9
Run Code Online (Sandbox Code Playgroud)

我还在学习应用函数,我怀疑这可能是应用或sapply,尽管尝试使用其中一个函数来获得我想要的结果.我基本上想要

y[lmat[1,]]
y[lmat[2,]]
y[lmat[3,]]
Run Code Online (Sandbox Code Playgroud)

等等....

但是lmat很大,我认为没有循环就有办法.谢谢.

d.b*_*d.b 7

lapply(1:nrow(lmat), function(i) y[lmat[i,]])
#OR
apply(lmat, 1, function(x) y[x])
Run Code Online (Sandbox Code Playgroud)