16

我有一个 ~20,000x20,000 数据,我如何在速度和内存方面有效地将其转换data.table()为 a ?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 的空间,但仍然很好。

4

2 回答 2

3

尝试:

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

它应该非常高效和快速。

于 2018-01-10T15:07:48.153 回答
2

@吉布森盖伊:

我犯了一个错误,将字符列包含到矩阵中,这将矩阵的类提升为所有列的字符。删除此列允许制作一个整数矩阵,并且它成功转换而没有错误/警告,并且模型运行良好。

于 2018-11-22T12:46:18.543 回答