У меня есть символьный вектор nms
имен переменных, которые появляются хотя бы в одном из нескольких файлов.Если переменная существует в более чем одном файле, значения будут одинаковыми.
У меня есть именованный список test_lst
, где имена верхнего уровня - это имена файлов.Подсписок списка включает в себя вектор имен переменных в файле.
Я хотел бы использовать purrr, пройти через test_lst
и найти первый файл, содержащий каждую из переменных, и вернуть именованный список, где имена - это имена файлов, а каждый элемент - это вектор переменных вnms
, которые существуют в этом файле.И я хотел бы проиндексировать подсписок по имени, а не по позиции.
Кажется, что это должно быть легко, и я не знаю, почему я не могу заставить его работать.
Данные:
test_lst <- list(ob1 = list(v1 = list(s1 = "X", s2 = paste0("A", 1:3)), v2 = paste0("A", 4:8)),
ob2 = list(v1 = list(s1 = "X", s2 = paste0("A", 9:11)), v2 = paste0("A", 12:16)))
nms <- c (paste0("A", 1:2), paste0("A", 9:10))
нерабочий код:
find_vars <- function(var_names, meta){
map_chr(meta, c("v1", "s2")) -> var_vecs
names(var_vecs)<- names(meta)
map_chr(var_vecs, var_names %in% .) -> out
names(out) <- names(var_vecs)
out
}
find_vars(var_names = nms, meta = test_lst)
Желаемый вывод, список:
$ob1
[1] "A1" "A2"
$ob2
[1] "A9" "A10"