我想使用purrr
创建表单
some_path/year/filename_with_year.xls
其中文件位于子目录中,该子目录基于用于创建文件名部分的相同年份列表
到目前为止,我能够使用cross3
和cross2
创建路径的第一部分和文件名,但是我没有成功地在完整路径中以合理的方式将它们组合在一起< / 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映射到两个列表,但使用其他函数。
答案 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"