正如themel 所指出的,R 在读取 csv 文件时非常非常慢。
如果你有 sqlite,它确实是最好的方法,因为看起来数据挖掘不仅仅是为了
一次,但以多种方式进行多次会话。
让我们看看我们有哪些选择
将 csv 读取到 R(慢)
与用 C 编写的工具(在我的机器上)相比,在 R 中执行此操作大约慢 20 倍
这很慢
read.csv( file='filename.csv' , head=TRUE , sep=",")
预先转换为 stata dta 文件并从那里加载
不是那么好,但它应该可以工作(我从未在 30 gig 文件上尝试过它,所以我不能肯定地说)
编写一个程序将 csv 转换为 dta 格式(如果你知道你在做什么)
使用来自的资源http://www.stata.com/help.cgi?dta和代码来自https://svn.r-project.org/R-packages/trunk/foreign/src/stataread.c读写
和http://sourceforge.net/projects/libcsv/
(以前做过,不过我没用过,不知道效果如何)
然后使用foreign
包裹 (http://cran.r-project.org/web/packages/foreign/index.html), 一个简单的
library(foreign)
whatever <- read.dta("file.dta")
会加载你的数据
直接使用mysql导入csv数据(有点难用,不过懂SQL也好)
从 SQL 控制台
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table
IGNORE 1 LINES <- If csv file contains headers
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'
Or
mysql -e "LOAD DATA INFILE 'ls.dat' INTO TABLE mytable1" mydatabase
然后从 R 控制台播放,使用RMySQL
R 与 MySQL 数据库的接口http://cran.r-project.org/web/packages/RMySQL/index.html
install.packages('RMySQL')
然后像这样玩
mydb = dbConnect(MySQL(), user=username, password=userpass, dbname=databasename, host=host)
dbListTables(mydb)
record <- dbSendQuery(mydb, "select * from whatever")
dbClearResult(rs)
dbDisconnect(mydb)
使用 R 执行所有 sqlite/postgreSQL/MySQL 后端 SQL 操作来导入 csv(推荐)
下载,来自https://code.google.com/p/sqldf/如果您没有包裹
or svn checkout http://sqldf.googlecode.com/svn/trunk/ sqldf-read-only
从 R 控制台,
install.packages("sqldf")
# shows built in data frames
data()
# load sqldf into workspace
library(sqldf)
MyCsvFile <- file("file.csv")
Mydataframe <- sqldf("select * from MyCsvFile", dbname = "MyDatabase", file.format = list(header = TRUE, row.names = FALSE))
然后你就出发吧!
就我个人而言,我会推荐library(sqldf)选项:-)