首页 > 解决方案 > 读取 csv 文件时使用 colClasses 时 R 中的警告消息

问题描述

我正在使用 lapply 读取文件列表。这些文件有多个行和列,我对第一列中的第一行感兴趣。我正在使用的代码是:

lapply(file_list, read.csv,sep=',', header = F, col.names=F, nrow=1, colClasses = c('character', 'NULL', 'NULL'))

第一行有三列,但我只阅读第一列。从 stackoverflow 上的其他帖子中,我发现这样做的方法是使用colClasses = c('character', 'NULL', 'NULL'). 虽然这种方法有效,但我想知道导致生成以下错误消息的根本问题,并希望防止它弹出:

“在 read.table(file = file, header = header, sep = sep, quote = quote, : cols = 1 != length(data) = 3"

标签: rlapplyread.csv

解决方案


这是为了让您知道您只保留三列数据中的一列,因为它不知道如何处理colClasses. "NULL"请注意,您的 NULL 是用引号引起来的。

一个例子:

write.csv(data.frame(fi=letters[1:3],
                            fy=rnorm(3,500,1),
                            fo=rnorm(3,50,2))
,file="a.csv",row.names = F)

write.csv(data.frame(fib=letters[2:4],
                     fyb=rnorm(3,5,1),
                     fob=rnorm(3,50,2))
          ,file="b.csv",row.names = F)

file_list=list("a.csv","b.csv")

lapply(file_list, read.csv,sep=',', header = F, col.names=F, nrow=1, colClasses = c('character', 'NULL', 'NULL'))

结果是:

[[1]]
  FALSE.
1     fi

[[2]]
  FALSE.
1    fib

Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  cols = 1 != length(data) = 3

这与您使用的相同:

lapply(file_list, read.csv,sep=',', header = F, col.names=F,
 nrow=1, colClasses = c('character', 'asdasd', 'asdasd'))

但是如果你这样做,警告就会消失(结果你会得到该行的其余部分):

lapply(file_list, read.csv,sep=',', header = F, col.names=F,
  nrow=1, colClasses = c( 'character',NULL, NULL))

您可以查看函数源代码中错误和警告的来源,例如,read.table直接输入,然后在其后不带任何内容,然后在其中搜索您的特定警告。


推荐阅读