purrr结合两个交叉与共同列表

时间:2018-05-21 22:10:51

标签: r purrr

我想使用purrr创建表单

之后的路径
some_path/year/filename_with_year.xls

其中文件位于子目录中,该子目录基于用于创建文件名部分的相同年份列表

到目前为止,我能够使用cross3cross2创建路径的第一部分和文件名,但是我没有成功地在完整路径中以合理的方式将它们组合在一起< / p>

library(tidyverse)

year_list<-c(2008,2009,2010, 2011)
country_list<-c("Andorra","Belarus")
remote_base_path<-"some_path"

filename<-cross3(country_list,year_list,".xls") %>%map(lift(paste0)) #create filename
filepath<-cross2(remote_base_path,year_list)%>%map(lift(file.path)) #create path


filename
filepath

如何在purrr逻辑中合并它们(例如,另一个cross2.filter的使用?)?

另一种看待它的方法是将year_list映射到两个列表,但使用其他函数。

1 个答案:

答案 0 :(得分:1)

这可能不是最好的方法,但您可以尝试:

l <- cross(list(c(2008,2009,2010, 2011), 
                c("Andorra","Belarus"), 
                "some_path")) %>%
  map(set_names, c("year", "country","remote"))

map_chr(l, ~ glue("{file.path(.$remote, .$year)}/{.$country}_{.$year}.xls"))

[1] "some_path/2008/Andorra_2008.xls" "some_path/2009/Andorra_2009.xls"
[3] "some_path/2010/Andorra_2010.xls" "some_path/2011/Andorra_2011.xls"
[5] "some_path/2008/Belarus_2008.xls" "some_path/2009/Belarus_2009.xls"
[7] "some_path/2010/Belarus_2010.xls" "some_path/2011/Belarus_2011.xls"