我正在尝试创建一个函数来清除数据并在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(),我会得到相同的输出吗?