【发布时间】:2011-09-01 10:58:30
【问题描述】:
我想读入一个 CSV 文件,它的第一行是变量名,后续行是这些变量的内容。有些变量是数字,有些是文本,有些甚至是空的。
file = "path/file.csv"
f = file(file,'r')
varnames = strsplit(readLines(f,1),",")[[1]]
data = strsplit(readLines(f,1),",")[[1]]
既然数据包含了所有变量,我该如何制作它,以便数据可以识别正在读取的数据类型,就像我做read.csv一样。
我需要逐行(或一次n行)读取数据,因为整个数据集太大而无法读入R。
【问题讨论】:
-
我不清楚为什么
read.csv('file.csv')不适合你? -
假设我正在阅读一个 100G 的文件。我想一次读取 500MB,做一些处理,然后读取下一个 500MB。我只是无法容纳 100G 的内存。
-
read.* 系列函数允许您只读取这么多行并跳过块,因此您应该使用这些参数而不是尝试解析行。
-
我同意下面@xiaodai 的评论,这里真正需要的还没有解决,因为建议的功能非常慢:在一个有 N 行的文件中一次读取一行将花费 $O(N^2)$ 时间。如果愿意编写一些低级代码,并且如果 R 有随机访问文件,那么只要不丢失调用之间的随机访问位置,就应该可以将其降低到 $O(N)$。