2014-10-29 64 views
2

我正在使用data.table的fread函数将csvfile加载到R中。它有一堆我不需要的列,所以select参数派上用场。不过,我注意到,如果select中指定的列中有一列不存在于csv文件中,fread将默默继续。如果csvfile中不存在其中一个选定的列,是否有可能使R发生错误?fread(data.table)选择列,如果列未找到,则抛出错误

#csvfile has "col1" "col2" "col3" "col4" etc 

colsToKeep <- c("col1", "col2" "missing") 

data <- fread(csvfile, header=TRUE, select=colsToKeep, verbose=TRUE) 

在上述例子中,data将有两列:col1col2。剩余的列将按预期丢弃,但默认跳过missing。如果知道fread跳过该列,肯定会很高兴,因为它没有找到它。

回答

4

我建议先解析第一行,然后抛出自己的错误。你可以这样做:

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")) 
+1

什么是'%chin%'? – stephentgrammer 2014-10-29 23:27:33

+2

它是'data.table'的快速版本,用于字符向量的'%in%'。 '''?%下巴%'''' – shadowtalker 2014-10-30 00:03:19

相关问题