Я пытаюсь создать функцию для очистки данных и возврата в виде data.frame в R.
Я использую функцию map_df () для возврата очищенных данных в качестве data.frame, иУ меня есть функция, написанная для очистки данных.
Первое, что я делаю, это извлекаю список файлов из папки, затем перебираю их и очищаю каждый файл.У меня есть предопределенный набор, указывающий, какие имена столбцов извлекать (хранятся в selectCols) в случае различий между файлами:
files <- list.files(filepath,full.names=F)
colInd <- which(names(fread(files[i],nrows=0)) %in% gsub("_","",selectCols))
У меня также есть функция для очистки моих данных, которая использует fread () длячитать в .csv файлах.В качестве аргументов для очистки файлов используются аргументы colInd и i.
cleanData <- function(files,i,colInd) {
addData <- fread(files[i],select=c(colInd))
[...]
}
В целом это выглядит так (как рекурсивная функция):
i <- 1
files <- list.files(filepath,full.names=F)
iterateCleaning <- function(files,i) {
colInd <- (which(names(fread(files[i],nrows=0)) %in% gsubs("_","",selectCols))
if (length(colInd)==length(selectCols)) {
newData <- map_df(files,cleanData)
saveToFolder(newData,i,files)
}
else {}
i=i+1
if (i<-length(files)){
iterateCleaning(files,i)
}
else {}
}
Когда я пытаюсь запустить без указанияаргументы для моей функции я получаю эту ошибку:
Error in fread(files,select=c(colInd)):
argument "colInd" is missing, with no default.
Когда я вставляю ее в свой map_df (), я делаю это так:
newData <- map_df(files,i,colInd,cleanData)
Затем я получаю эту ошибку:
Error in as_mapper(.f,...): object 'colInd' not found.
Есть предложения по устранению этой ошибки?Насколько я понимаю, map_df () применяется к каждому элементу функции, но мне не нужно применять его к входам i и colInd, мне просто нужны они для функции, которую я вызываю в map_df ().Как я могу вызвать map_df () для функции, которая требует дополнительных аргументов?
Я прочитал документацию, но это немного сбило с толку.Это говорит о том, что функция с одним аргументом должна использовать "."и для функций с двумя аргументами использовать .x и .y, но я не уверен, что это значит.Мое первоначальное предположение примерно такое, но ни одна строка не работает):
newData <- map_df(files,cleanData,.i,.colInd)
newData <- map_df(files,cleanData,.x=i,.y=colInd)
Есть какие-нибудь рекомендации?Будет ли у меня такой же вывод, если потом я просто вызову map_df () для вывода моей функции?