R 如何在列表上围绕两个lappy调用对循环进行矢量化

R 如何在列表上围绕两个lappy调用对循环进行矢量化,r,lapply,R,Lapply,我有一个包含两个元素的列表。第一个元素是向量,而第二个元素是列表。对于第二个元素,每个项目都对应于主列表第一个元素中的项目。最好看看这个例子: 我有一份清单: mylist = list(c("w","x","y","z"), list( c("a", "b"), c("c

我有一个包含两个元素的列表。第一个元素是向量,而第二个元素是列表。对于第二个元素,每个项目都对应于主列表第一个元素中的项目。最好看看这个例子:

我有一份清单:

mylist  = list(c("w","x","y","z"),
             list(
                 c("a", "b"),
                 c("c"),
                 c("a", "c", "b"),
                 c("d","a","e"))
            )
这就是我想要的:

 want = list(list("a",c("w","y","z")),
             list("b",c("w","y")),
             list("c",c("x","y")),
             list("d",c("z")),
             list("e",c("z"))
            )
这就是我如何正确地使用暴力强制解决方案:

codes.vec =unique(unlist(list(mylist[[2]])))

new.list=NULL
for(i in 1:5){
   new.list[[i]] = list(codes.vec[i],
                        mylist[[1]][as.logical(unlist(lapply(lapply(mylist[[2]],function(x) 
   stri_detect_fixed(x,codes.vec[i])),sum)))]
                    )
} 
如何将其矢量化以避免循环?我想不出来,但我试图包装另一个*apply()函数,但我一直在得到有关FUN.VALUE的错误。对于我的真实数据,目前需要15分钟来解决这个问题,这是不切实际的

注意:如果有帮助的话,我的申请是我有人口普查数据,我知道每个街区组(全部或部分)所属的所有ZCTA5代码(邮政编码)。我想颠覆这个想法,在每个ZCTA5中获得块组。简单地说,我想从知道块组“w”在ZCTA5“a”和“b”中开始,让ZCTA代码“a”有块组:“w”、“y”、“z”,而ZCTA5代码“b”有块组:“w”和“y”

非常感谢您的帮助,谢谢


编辑:变量命名不好

这里有一个使用
Map
的解决方案:

df$a
#>[1]“w”“y”“z”
#> 
#>b美元
#>[1]“w”“y”
#> 
#>$c
#>[1]“x”“y”
#> 
#>美元
#>[1]“z”
#> 
#>$e
#>[1]“z”

我们可以从
purr

library(stringr)
library(dplyr)
library(tidyr)
library(purrr)
# // transpose the list
purrr::transpose(list) %>% 
      # // loop over the list elements and do a crossing
      map_dfr(~ crossing(!!! .) %>%
      # // set the names of the columns
      set_names(str_c('a', seq_along(.)))) %>%
      # // split the first column by the second
      with(., split(a1, a2))
#$a
#[1] "w" "y" "z"

#$b
#[1] "w" "y"

#$c
#[1] "x" "y"

#$d
#[1] "z"

#$e
#[1] "z"

您正在寻找的是-忽略apply族

unstack(stack(setNames(mylist[[2]], mylist[[1]])),ind~values)
$a
[1] "w" "y" "z"

$b
[1] "w" "y"

$c
[1] "x" "y"

$d
[1] "z"

$e
[1] "z"

也许简洁的版本是
unname(Map(list,lst[[1]],lst[[2]])
?@ThomasIsCoding,我从变量中删除了名称,因为它们只是一个问题。在主体部分中,我用名称来引用它们,但示例足够简短,可以保留没有名称的逻辑。我会试试你的主意。谢谢。@ThomasDevine我已经更新了。我想也许这样索引结果会更容易use@AllanCameron,这个有效,比我的速度快了300倍。非常感谢你!我试过使用rbind,但我不认为使用map函数有完美的意义。这是迄今为止在我的实际数据上使用的最快的,非常感谢。