有效地将数据从data.table转换为矩阵(速度和内存)

时间:2012-10-02 14:06:34

标签: r matrix data.table

我有~2,000x20,000的数据,如何在速度和内存方面有效地将data.table()转换为matrix

我尝试了m = as.matrix(dt),但需要很长时间才能发出很多警告。 df = data.frame(dt)需要很长时间,因此也会达到内存限制。

有没有有效的方法呢?或者,只是data.table中的一个函数,它返回dt和矩阵形式(根据需要使用glmnet包提供给统计模型)?

简单地包装到as.matrix会给我以下错误:

x = as.matrix(dt)

Error: cannot allocate vector of size 2.9 Gb
In addition: Warning messages:
  1: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size)
  2: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size)
  3: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size)
  4: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size)

我的操作系统我有64位Windows7和8gb内存,我的Windows任务管理器显示Rgui.exe占用的空间超过4GB,但仍然很好。

2 个答案:

答案 0 :(得分:2)

尝试:

    result <- as.matrix(tidytext::cast_sparse(dat_table,
    column_name_of_rows,
    column_name_of_columns,
    column_name_of_values))

它应该非常高效和快速。

答案 1 :(得分:2)

@GibsonGay:

  

我在将字符列包含到矩阵中犯了一个错误,这将矩阵的类提升为所有列的字符。删除此列可以创建一个整数矩阵,并且可以成功进行转换而没有错误/警告,并且可以很好地运行模型。