我有一个.csv文件:example.csv,包含8000列x 40000行.csv文件的每列都有一个字符串标题.所有字段都包含0到10之间的整数值.当我尝试使用read.csv加载此文件时,结果非常慢.添加参数nrow = 100时速度也很慢.我想知道是否有办法加速read.csv,或使用其他函数而不是read.csv将文件作为矩阵或data.frame加载到内存中?
提前致谢.
Jos*_*ich 17
如果您的CSV仅包含整数,则应使用scan
而不是read.csv
,因为?read.csv
说:
‘read.table’ is not the right tool for reading large matrices,
especially those with many columns: it is designed to read _data
frames_ which may have columns of very different classes. Use
‘scan’ instead for matrices.
Run Code Online (Sandbox Code Playgroud)
由于您的文件有标题,因此您需要skip=1
,如果设置它可能会更快what=integer()
.如果你必须使用read.csv
和速度/内存消耗是一个问题,设置colClasses
参数是一个巨大的帮助.
尝试使用fread{data.table}
.到目前为止,这是将.csv
文件读入R 的最快方法.这里有一个很好的基准.
library(data.table)
data <- fread("c:/data.csv")
Run Code Online (Sandbox Code Playgroud)
如果您想让它更快,您还可以只读取要使用的列的子集:
data <- fread("c:/data.csv", select = c("col1", "col2", "col3"))
Run Code Online (Sandbox Code Playgroud)
还可以尝试Hadley Wickham的readr
软件包:
library(readr)
data <- read_csv("file.csv")
Run Code Online (Sandbox Code Playgroud)