我想通过以下方式将数字向量与逻辑矩阵进行子集化:给定向量 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 很大,我认为有一种方法可以不使用循环。谢谢。
最佳答案
lapply(1:nrow(lmat), function(i) y[lmat[i,]])
#OR
apply(lmat, 1, function(x) y[x])
关于R 用逻辑矩阵对向量进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383619/