用逻辑矩阵对向量进行子集操作

6

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

y <- c(4,8,1,3,5,7)

还有一个逻辑矩阵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))

它看起来像这样

> 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

我想应用某个名为 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

我还在学习apply函数,尽管我曾试图使用其中一种函数来获得想要的结果,但我认为通过apply或sapply也可以实现。我的基本需求是:
y[lmat[1,]]
y[lmat[2,]]
y[lmat[3,]]

但是LMAT很大,我认为有一种方法可以不用循环来完成。谢谢。


1
你是不是打算在 y 中有7个值,但只有 lmat 中的6行? - thelatemail
刚刚修复了,谢谢你发现了这个问题。 - wtrs
1个回答

8
lapply(1:nrow(lmat), function(i) y[lmat[i,]])
#OR
apply(lmat, 1, function(x) y[x])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接