批量导入无表头CSV时header=FALSE参数失效问题求助
解决批量导入无列名CSV的报错问题
这个问题我之前处理过,咱们先理清楚报错的原因,再给出解决办法:
错误原因
你写的lapply(read.csv(header = FALSE))其实是直接调用了read.csv函数,但read.csv必须要file参数指定要读取的文件,这里你没传,所以就会抛出argument "file" is missing的错误。lapply需要的是一个能接收每个文件名作为输入的函数,而不是直接执行read.csv的结果。
两种正确的写法
方法1:使用匿名函数
用匿名函数把每个文件名传递给read.csv,同时指定header = FALSE:
dat <- list.files(pattern="*.csv") %>% lapply(function(x) read.csv(x, header = FALSE))
这里的x代表list.files返回的每个文件名,函数会依次把每个文件读入,并且不把首行设为列名。
方法2:利用lapply的额外参数传递
lapply支持通过...传递额外参数给目标函数,写法更简洁:
dat <- list.files(pattern="*.csv") %>% lapply(read.csv, header = FALSE)
这种写法中,lapply会自动把每个文件名作为第一个参数(也就是file参数)传给read.csv,后面的header = FALSE作为额外参数一起传递,效果和方法1完全一样。
额外提示
如果你的CSV文件用的不是逗号分隔(比如制表符、分号),可以在后面加上对应的分隔符参数,比如:
# 制表符分隔的文件 dat <- list.files(pattern="*.csv") %>% lapply(read.csv, header = FALSE, sep = "\t")
内容的提问来源于stack exchange,提问作者DJC
相关产品推荐
相关产品推荐

