我有~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,但仍然很好。
答案 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:
我在将字符列包含到矩阵中犯了一个错误,这将矩阵的类提升为所有列的字符。删除此列可以创建一个整数矩阵,并且可以成功进行转换而没有错误/警告,并且可以很好地运行模型。