Как получить элемент вместе со списком, в котором он находится, из списка списков? - PullRequest
4 голосов
/ 22 июня 2019

Предположим, у меня есть список списков, как показано ниже:

> 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

Есть ли какое-либо возможное решение для этого?

EDIT :: Список образцов может быть получен с использованием -

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 ]

2 голосов
/ 22 июня 2019

Можно попробовать:

myList[sapply(myList, function(x) any(x %in% 7))]
1 голос
/ 22 июня 2019

Если 18 - это число, которое вы хотите найти в списке, попробуйте:

myList[sapply(myList, function(x) 18 %in% x)]
1 голос
/ 22 июня 2019

Использование purrr пакета:

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

purrr предоставляет множество полезных функций обработки списка, которые описаны в чит-листе, который можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...