如何将函数参数传递给map_df()?

时间:2018-10-12 15:54:56

标签: r dataframe fread mapper

我正在尝试创建一个函数来清除数据并在R中作为data.frame返回。

我正在使用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(),我会得到相同的输出吗?

0 个答案:

没有答案