Использование назначенного имени списка из символьной строки в векторе - PullRequest
1 голос
/ 10 марта 2019

У меня есть несколько списков:

my_list1 <- list("data" = list(c("a", "b", "c")), "meta" = list(c("a", "b")))
my_list2 <- list("data" = list(c("x", "y", "z")), "meta" = list(c("x", "y")))

Я хотел бы иметь возможность выполнять некоторые операции над этими списками, но мне нужно использовать имена списков, хранящихся в векторе, при созданииих динамически от вызова API.Такой вектор может быть:

list_vec <- c("my_list1", "my_list2")

У меня проблемы с вычислением строки символов в векторе в названии списка.Я знаю, что эта тема уже была рассмотрена, но часть, на которой я застрял, - это возможность извлечь только подсписок data при запуске функций в assign.По сути, такая ситуация:

library(purrr)
for(i in seq_along(1:length(list_vec))){
  assign(list_vec[[i]], map_df(list_vec[[i]][["data"]], unlist))
}

Что даст результат:

# A tibble: 3 x 1
  data 
  <chr>
1 a    
2 b    
3 c    

Я мог бы также сделать что-то вроде:

my_list1$meta <- NULL

с

list_vec[[1]][["meta"]] <- NULL

Чтобы сократить список только до подсписка data, но я не могу в динамически назначенных именах.

Я также обертываю вещи с eval, но не могу получитьчтобы это работало.

Так что конкретно мне нужно оценить имя списка из строки, чтобы я мог извлечь из него подсписок.

1 Ответ

1 голос
/ 10 марта 2019

Мы можем передать вектор list_vec в mget, который возвращает вложенный список.Мы используем lapply для извлечения ([[) элемента data и используем unlist для преобразования этого вложенного списка в список.

unlist(lapply(mget(list_vec), `[[`, "data"), recursive = FALSE)

Результат

#$my_list1
#[1] "a" "b" "c"

#$my_list2
#[1] "x" "y" "z"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...