4

假设,我有一个如下列表:

> myList
[[1]]
 [1]   0   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119 126 133 140 147 154 161 168 175 182 189 196 203 210 217

[[2]]
 [1]   1   8  15  22  29  36  43  50  57  64  71  78  85  92  99 106 113 120 127 134 141 148 155 162 169 176 183 190 197 204 211 218

[[3]]
 [1]   2   9  16  23  30  37  44  51  58  65  72  79  86  93 100 107 114 121 128 135 142 149 156 163 170 177 184 191 198 205 212 219

[[4]]
 [1]   3  10  17  24  31  38  45  52  59  66  73  80  87  94 101 108 115 122 129 136 143 150 157 164 171 178 185 192 199 206 213 220

[[5]]
 [1]   4  11  18  25  32  39  46  53  60  67  74  81  88  95 102 109 116 123 130 137 144 151 158 165 172 179 186 193 200 207 214 221

如何在此列表列表中搜索元素并检索它所属的整个列表?

我尝试了如下方法:

> myList[grep(7, myList)][[1]]
 [1]   0   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119 126 133 140 147 154 161 168 175 182 189 196 203 210 217

这个案例看起来是正确的,但是当我为下面的案例尝试这个时,我得到了错误的结果。

> myList[grep(18, myList)][[1]]
 [1]   0   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119 126 133 140 147 154 161 168 175 182 189 196 203 210 217

而正确的输出应该是:

[1]   4  11  18  25  32  39  46  53  60  67  74  81  88  95 102 109 116 123 130 137 144 151 158 165 172 179 186 193 200 207 214 221

有什么可能的解决方案吗?

编辑:: 样本列表可以使用 --

l <- seq(0, 194)
myList <- list()

for (d in l){
        temp <- intersect(seq(d, max(l), by = 7),l)
        if (any(sapply(myList,function(x) d %in% x)) == FALSE){
            myList <- append(myList, list(temp))
        }
}
4

3 回答 3

2

可以试试:

myList[sapply(myList, function(x) any(x %in% 7))]
于 2019-06-22T20:40:55.343 回答
1

使用purrr包:

library(purrr)
keep(mylist, function(x, y) {any(x == y)}, y = 18)

purrr提供了许多有用的列表处理功能,这些功能都记录在可在此处找到的备忘单中

于 2019-06-22T20:43:19.837 回答
1

如果 18 是您希望在列表中找到的数字,请尝试:

myList[sapply(myList, function(x) 18 %in% x)]
于 2019-06-22T20:49:26.920 回答