我正在做一个简单的read.csv调用,并且我已经能够使用colClasses来指定每列中的数据类型(如果任何列都无法转换为指定的数据类型,则会停止加载很好!)。但是,我想更进一步,能够为每行读取执行验证回调。
目前,我的代码如下所示:
csvData <- {};
for (def in cacheEnv$requiredFiles) {
# load each CSV file and store in csvData
currentCsv <- read.csv(paste(directoryPath, def$name, sep=""),
header = TRUE,
stringsAsFactors = FALSE,
colClasses = def$columns);
csvData[[def$name]] <- currentCsv;
}
我想要做的是在每一行上调用一个函数,该函数可以抛出错误(快速失败),甚至可以将读取的值重新写入转换后的形式(例如,如果你想要的话)在将值读入结果数据帧之前对值进行大写变换。
看起来像这样的东西:
csvData <- {};
for (def in cacheEnv$requiredFiles) {
# load each CSV file and store in csvData
currentCsv <- read.csv(paste(directoryPath, def$name, sep=""),
header = TRUE,
stringsAsFactors = FALSE,
colClasses = def$columns,
callback = def$validateFunc);
csvData[[def$name]] <- currentCsv;
}
回调只是一个可以将列值作为参数的函数,并对值执行某些操作(或抛出错误)。
这样做的原因(而不是读取整个文件然后转换它)是文件可能非常大,我想早点而不是晚点失败。但我认为较小文件的解决方法是将其全部读入,然后在加载后将其转换为内存。
但如果有人有解决方案,那么逐行回调会很好!