web-dev-qa-db-ja.com

大きなdata.tableのwrite.csv

あまり大きくない(2 GB)data.tableがありますが、何らかの理由でwrite.csvを書き出すのに非常に長い時間がかかり(実際に待ちきれない)トンを使用しているようですof RAMそれをする。

data.tabledata.frameに変換しようとしましたが、data.tabledata.frameを拡張するため、これは実際には何もしません。誰かがこれに遭遇しましたか?

さらに重要なのは、あなたがそれを止めたら Ctrl-C、Rはメモリを返さないようです。

49
Alex

2019.01.07更新

fwriteは2016-11-25からCRANに登録されています。

install.packages("data.table")

2016年4月8日更新

fwriteが最近data.tableパッケージの開発バージョンに追加されました。また、並行して(暗黙的に)実行されます。

# Install development version of data.table
install.packages("data.table", 
                  repos = "https://Rdatatable.github.io/data.table", type = "source")

# Load package
library(data.table)

# Load data        
data(USArrests)

# Write CSV
fwrite(USArrests, "USArrests_fwrite.csv")

write.tableのパフォーマンスの高速化 に示されている詳細なベンチマークテストによると、fwriteはそこのwrite.csv(YMMV)よりも約17倍高速です。


2015年12月15日更新

将来、data.tableパッケージにfwrite関数が追加される可能性があります。 https://github.com/Rdatatable/data.table/issues/58 を参照してください。このスレッドでは、Gistがリンクされています。これにより、プロセスを2倍高速化するような関数のプロトタイプが提供されます(著者によると、 https://Gist.github.com/oseiskar/15c4a3fd9b6ec5856c89 =)。

元の回答

私も同じ問題を抱えていて(さらに大きなCSVファイルを書き込もうとして)、CSVファイルの使用をやめることにしました。

CSVファイルを処理するよりもはるかに高速なので、SQLiteを使用することをお勧めします。

require("RSQLite")
# Set up database    
drv <- dbDriver("SQLite")
con <- dbConnect(drv, dbname = "test.db")
# Load example data
data(USArrests)
# Write data "USArrests" in table "USArrests" in database "test.db"    
dbWriteTable(con, "arrests", USArrests)

# Test if the data was correctly stored in the database, i.e. 
# run an exemplary query on the newly created database 
dbGetQuery(con, "SELECT * FROM arrests WHERE Murder > 10")       
# row_names Murder Assault UrbanPop Rape
# 1         Alabama   13.2     236       58 21.2
# 2         Florida   15.4     335       80 31.9
# 3         Georgia   17.4     211       60 25.8
# 4        Illinois   10.4     249       83 24.0
# 5       Louisiana   15.4     249       66 22.2
# 6        Maryland   11.3     300       67 27.8
# 7        Michigan   12.1     255       74 35.1
# 8     Mississippi   16.1     259       44 17.1
# 9          Nevada   12.2     252       81 46.0
# 10     New Mexico   11.4     285       70 32.1
# 11       New York   11.1     254       86 26.1
# 12 North Carolina   13.0     337       45 16.1
# 13 South Carolina   14.4     279       48 22.5
# 14      Tennessee   13.2     188       59 26.9
# 15          Texas   12.7     201       80 25.5

# Close the connection to the database
dbDisconnect(con)

詳細については、 http://cran.r-project.org/web/packages/RSQLite/RSQLite.pdf を参照してください

http://sqliteadmin.orbmu2k.de/ などのソフトウェアを使用して、データベースにアクセスし、データベースをCSVなどにエクスポートすることもできます。

-

58
majom