2017-08-07 22 views
1

我有一個數據框叫t 57247行27個變量。數據幀是從一個16 MB的.tsv文件導入的,所以它並不那麼龐大。其中一列是approved_date,其中包含MySQL時間戳字符串的因素。一個例子是"2007-10-08 06:38:18"R sapply和as.POSixct內存不足

我有一個函數將這個字符串轉換成一個POSIXct,一個整數。我想爲整個專欄做這個。

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

當我嘗試使用前10行時,一切正常:時間戳轉換爲整數。

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

您可能還有其他事情在這裏。根據taskmgr的說法,我正在使用'sapply'代碼(被Hong Ooi認爲效率低下,我同意),它有一個100k行的data.frame,儘管這肯定很慢,但它可以處理大約200MB的內存。 (R-3.3.3,win10/64) – r2evans

回答

1

首先,R 3.0是超古老的。如果可能的話,你應該升級。

其次,as.POSIXct被矢量化。

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

這樣做!任何想法爲什麼sapply方法使用如此多的記憶? – qwr

+0

我更新到R(3.4.1)的最新版本,'sapply'需要更長的時間,但不再使用太多的內存。 – qwr