【问题标题】:fread (data.table) select columns, throw error if column not foundfread (data.table) 选择列,如果未找到列则抛出错误
【发布时间】:2014-10-29 22:44:55
【问题描述】:

我正在使用 data.table 的 fread 函数将 csvfile 加载到 R 中。它有一堆我不需要的列,所以select 参数就派上用场了。但是,我注意到,如果 select 中指定的列之一在 csvfile 中不存在,则 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 将有两列:col1col2。其余列将按预期删除,但 missing 会被静默跳过。很高兴知道 fread 正在跳过该列,因为它没有找到它。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

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

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

    【讨论】:

    • 这是data.table 的快速版本%in% 用于字符向量。 ?`%chin%`
    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 2014-10-28
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多