2017-08-07 9 views
1

私はtと呼ばれる57247行の27変数のデータフレームを持っています。データフレームは16 MBの.tsvファイルからインポートされたので、それほど巨大ではありません。これらの列の1つは、approved_dateです。この要素には、MySQLのタイムスタンプ文字列が含まれています。例は"2007-10-08 06:38:18"です。Rサプリーとas.POSIXctメモリ不足

私はこの文字列を整数のPOSIXctに変換する関数を持っています。私は列全体でこれをやりたい

convert_datetime <- function(dt) as.POSIXct(dt, tz="Asia/Hong_Kong") 

最初の10行で試してみると、すべて正常に動作します。タイムスタンプはintに変換されます。しかし

x <- head(t, 10) 
x$approved_date <- sapply(x$approved_date, convert_datetime) 

、私はテーブル全体でみてください、

t$approved_date <- sapply(t$approved_date, convert_datetime) 

RStudioは6 GBのRAMまで使用し、メモリ不足します。だから明らかに私はここで何か間違っている。私が望む機能をどのように手に入れることができますか? R v3.0.2を使用する。

+0

あなたはおそらくここで起こって何かを持っています。私は100k行のdata.frameで 'sapply'コード(Hong Ooiは非効率だと思いますが、私は同意します)を実行していますが、確かに遅い*ですが、約200MBのRAMが働いています(taskmgrに従って)。 (R-3.3.3、win10/64) – r2evans

答えて

1

まず、R 3.0は超古いものです。可能であれば、実際にアップグレードする必要があります。

第2に、as.POSIXctはベクター化されている。

x$approved_date <- as.POSIXct(x$approved_date, tz=*) 
+1

それはそれをしました!なぜsapplyメソッドがあまりにも多くのメモリを使うのか? – qwr

+0

R(3.4.1)の最新バージョンに更新され、 'sapply'は時間がかかりますが、それ以上のメモリを使わなくなりました。 – qwr