我正在使用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!=长度(数据)= 3“
答案 0 :(得分:2)
这是要让您知道您只是将数据中的一列保留为三列,因为它不知道如何处理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
(不带任何后面的内容),然后在其中搜索特定的警告,即可查看功能源代码中的错误和警告来自何处。