Как передать аргумент функции в map_df ()? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь создать функцию для очистки данных и возврата в виде 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 () для вывода моей функции?

...