我正在使用data.table的fread
函数将csvfile加载到R中。它有一堆我不需要的列,因此select
参数派上用场。但是,我注意到,如果在csvfile中不存在select中指定的列之一,则fread将以静默方式继续。如果csvfile中不存在其中一个选定列,是否可以使R抛出错误?
#csvfile has "col1" "col2" "col3" "col4" etc
colsToKeep <- c("col1", "col2" "missing")
data <- fread(csvfile, header=TRUE, select=colsToKeep, verbose=TRUE)
在上面的示例中,data
将包含两列:col1
,col2
。其余列将按预期删除,但会以missing
静默跳过。很高兴知道fread正在跳过该列,因为它没有找到它。
答案 0 :(得分:6)
我建议先抢先解析第一行,然后抛出自己的错误。你可以这样做:
read_cols <- function(file_name, colsToKeep) {
header <- fread(file_name, nrows = 1, header = FALSE)
all_in_header <- all(colsToKeep %chin% unlist(header))
stopifnot(all_in_header)
fread(file_name, header=TRUE, select=colsToKeep, verbose=TRUE)
}
my_data <- read_cols(csvfile, c("col1", "col2" "missing"))