Purrr,write_csv和命名事物

问题描述

这是一个多步骤的过程,所以让我尝试解释发生了什么...

Am正在将大约2000个文件写入csv。这是一个地理编码项目,并决定使用tidygeocoder,不幸的是,它会导致一定频率的超时错误,但在我的工作流程中效果很好。

一个过程是从csv中读取各种文件并命名。只需对前4个文件进行测试,这样我就可以正确完成此过程。

将4个文件名传递给read_csv,然后设置名称,最后在每个文件中都有一个Combine_Address列,我使用它对地址进行地理编码。再次没有问题。但是,最后一个问题是命名。

四个文件中的每个文件都应具有唯一的名称,但我始终以错误消息结尾

stream_delim_(df,path,...,bom = bom,quote_escape = quote_escape)中的错误: 无效的连接

这是由于这两个原因造成的...

  • write_csv(path = here(“ excel_output”,“ geocode_output”,paste0(names(.x),“ _ geocode.csv”))))

  • write_csv(path = here(“ excel_output”,“ geocode_output”,胶水(“ {names(.x)} _ geocode.csv”)))))
# Loop geocode over .csv and export -------------------

files_to_read <- str_subset(list.files(here("excel_output","csv_output"),pattern = ".csv$",full.names = T),".csv")

file_names <- str_subset(list.files(here("excel_output",pattern = ".csv$"),".csv") %>% 
  str_remove(.,".csv")


files_to_read[1:4] %>% 
  map(~read_csv(.x)) %>%
  set_names(nm = file_names[1:4]) %>% 
  walk(~.x %>%
         geocode(Combine_Address) %>%
         write_csv(path = here("excel_output","geocode_output","_geocode.csv")))

上面的代码运行良好,但是仅输出一个名为“ _geocode.csv”的文件,但是paste0和粘胶都产生了代码错误。不知所措现在尝试什么。任何见识将不胜感激。

解决方法

您可以在一个map本身中进行此操作。试试:

library(readr)

files_to_read[1:4] %>% 
  purrr::map(~read_csv(.x) %>%  
               geocode(Combine_Address) %>% 
               write_csv(sprintf('geocode_output_%s_geocode.csv',basename(.x))))