【发布时间】:2019-11-06 17:57:51
【问题描述】:
我有一个字符向量 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"
【问题讨论】:
标签: r list reference iteration purrr