Поиск вектора в указанном c элементе вложенного списка в R - PullRequest
1 голос
/ 06 февраля 2020

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

a = list(x = 5, y = c(11, 12, 13))
b = list(x = 4.7, y = c(112, 5, 2))
c = list(x = 77, y = c(5, 1, 1))
d = list(x = 5, y = c(22, 11, 43))
test_list = list(a, b, c, d)

У меня есть вложенный список: test_list. Я хотел бы найти вектор 5 только в элементе x в tests_list и вернуть индексы списка, например, здесь как c (1,4).

Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 06 февраля 2020

Я бы попробовал с lapply как здесь:

a = list(x = 5, y = c(11, 12, 13))
b = list(x = 4.7, y = c(112, 5, 2))
c = list(x = 77, y = c(5, 1, 1))
d = list(x = 5, y = c(22, 11, 43))
test_list = list(a, b, c, d)

which(unlist(lapply(test_list, function(x) {

    x$x == 5

})))

Сначала вы выбираете x, затем 5, затем unlist и затем проверяете, какие TRUE.

1 голос
/ 06 февраля 2020

Поскольку x имеет значение length 1 в каждом элементе list, может быть лучше выполнить сравнение сразу после извлечения элемента

which(sapply(test_list, `[[`, 'x')==5)
#[1] 1 4
1 голос
/ 06 февраля 2020

Аналогично, используя purrr:

which(map_lgl(test_list, ~ pluck(., "x") == 5))

[1] 1 4
1 голос
/ 06 февраля 2020

Попробуйте:

 which(vapply(test_list, function(x) x[["x"]] == 5, logical(1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...