Я прошу прощения за размер кода в этом вопросе, но, поскольку я не смог определить, где он идет не так, я решил предоставить его как можно ближе к оригиналу.
У меня есть следующая среда с двумя функциями:
Первая функция должна принимать в качестве входных данных серию путей для чтения файлов .csv (EMPRESA_reads
), связывать их и экспортировать:
library(dplyr)
library(purrr)
library(glue)
library(data.table)
read_compile = function(EMPRESA_reads,Export_path){
cat("Reading EMPRESA files... \n")
EMPRESA_Imported = map(EMPRESA_reads,fread,sep = ",")
cat("Binding EMPRESA rows... \n")
EMPRESA_Imported = EMPRESA_Imported%>%
lapply(., mutate_if, is.integer, as.character)%>%
bind_rows()
cat("Exporting file... \n")
setwd(Export_path)
fwrite(EMPRESA_Imported,file = "EMPRESA_compiled.csv",sep = ";")
cat("Done! \n")
}
Вторая функция должна принимать в качестве входных данных строку идентификатора (RFB_date
), генерировать правильные пути для ввода в первой функции, а затем вызывать ее:
Merge_by_date = function(RFB_date){
cat(glue("Starting RFB_date {RFB_date}"))
cat("\n")
EMPRESA_path = glue("path/RFB_Empresas_{RFB_date}")
Export_path = glue("path/RFB_Socios_{RFB_date}/With_EMPRESA_info")
# Creating list of files to be read in each folder
# Check the file name pattern and adjust accordingly
EMPRESA_files = list.files(path = EMPRESA_path, pattern = "^empresas")
EMPRESA_reads = glue("{EMPRESA_path}/{EMPRESA_files}")
read_compile(EMPRESA_reads,Export_path)
}
Я хочу запустить эту вторую функцию для несколько дат, поэтому я сопоставляю их:
RFB_dates = c("201902",
"201906",
"201911",
"202002")
map(RFB_dates,Merge_by_date)
При первом запуске (для RFB_dates[1]
), однако, я получаю такой вывод:
Starting RFB_date 201902
Reading EMPRESA files...
Binding EMPRESA rows...
Error in bind_rows_(x, .id) :
STRING_ELT() can only be applied to a 'character vector', not a 'char'
Что указывает на некоторую проблему при связывании элементы списка EMPRESA_Imported
в этом прогоне, но не раньше.
Дело в том, что при ручном запуске функции один раз (вместо ее отображения) она не выдает эту ошибку , выполняя bind_rows()
как шо uld
Я не понял, почему это произошло, и благодарен за любую помощь!
О файлах .csv, которые я читаю: они довольно большие (всего ~ 15 ГБ) ), но не содержат ничего необычного: просто столбцы со строкой и цифрами c data.
Спасибо!