R 用逻辑矩阵对向量进行子集化

标签 r list subset apply sapply

我想通过以下方式将数字向量与逻辑矩阵进行子集化:给定向量 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/

相关文章:

r - 使用 MICE 进行多重插补后,如何在 R 中的子集上使用 lm() 运行线性回归

r - 使用 quantmod 下载 FRED 数据 : can dates be specified?

R:为每个类别建立单独的模型

java - 将值设置为 sam 对象时替换列表值

java - 是否可以将 Set 转换为 List?

r - 嵌套列表的条件子集

r - 我如何反转 R 中矩阵的二进制数字(0 和 1)?

c++ - 如何处理 R 中的 C++ 内部数据结构以允许保存/加载?

c++ - 如何将 OpenCV 函数 polylines() 应用于 C++ 中的列表

r - xts 子集化给出了几个月的错误结果