如何从列表列表中检索元素及其所在的列表?

时间:2019-06-22 20:30:29

标签: r

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

> 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))
        }
}

3 个答案:

答案 0 :(得分:2)

可以尝试:

myList[sapply(myList, function(x) any(x %in% 7))]

答案 1 :(得分:1)

使用categories软件包:

category

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

答案 2 :(得分:1)

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

myList[sapply(myList, function(x) 18 %in% x)]