Добавление вектора в компоненты списка - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующий список:

A <- c(11)
B <- c(7, 13)
C <- c(1, 10, 11, 12)
my_list <- list(A, B, C)
> my_list
[[1]]
[1] 11

[[2]]
[1]  7 13

[[3]]
[1]  1 10 11 12

Я хотел бы добавить -2, -1, 0, 1 и 2 к каждому числу в этом списке и сохранить все уникальные значения в пределахкаждый элемент списка, чтобы получить следующий результирующий список:

> my_new_list
[[1]]
[1] 9 10 11 12 13

[[2]]
[1]  5 6 7 8 9 11 12 13 14 15

[[3]]
[1]  -1 0 1 2 3 8 9 10 11 12 13 14

Я попробовал следующий код, но не получил результат, на который надеялся:

my_new_list <- lapply(res, `+`, -2:2)
> my_new_list
$`1`
[1]  9 10 11 12 13

$`2`
[1]  5 12  7 14  9

$`3`
[1] -1  9 11 13  3

Почему этопроисходит, и как я могу получить желаемый результат?Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Как насчет этого:

my_new_list <- lapply(my_list, function(x) unique(union(x,sapply(x, function(y) y +c(-2:2))    )))
my_new_list <-  lapply(my_new_list, sort)
my_new_list

[[1]]
[1]  9 10 11 12 13

[[2]]
 [1]  5  6  7  8  9 11 12 13 14 15

[[3]]
 [1] -1  0  1  2  3  8  9 10 11 12 13 14
0 голосов
/ 22 октября 2018

Предполагая, что нам нужны unique значения

lapply(my_list, function(x) sort(unique(unlist(lapply(x, `+`, -2:2)))))

Или с outer

lapply(my_list, function(x) sort(unique(c(outer(x, -2:2, `+`)))))

Или с rep и повторным циклом

lapply(my_list, function(x) sort(unique(rep(-2:2, each = length(x)) + x)))
#[[1]]
# [1]  9 10 11 12 13

#[[2]]
# [1]  5  6  7  8  9 11 12 13 14 15

#[[3]]
# [1] -1  0  1  2  3  8  9 10 11 12 13 14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...