【发布时间】:2020-07-18 16:24:12
【问题描述】:
我有一个 2 列 1316171 行的数据框,但一个 2 列 7621 行的数据框也会产生问题。
myFun <- function(n = 5000) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
m <- myFun(7021)
d <- myFun(7021)
df <-data.frame(m,d)
我想创建虚拟变量,所以我使用以下非常简单的代码:
genes2 <- fastDummies::dummy_cols(df, select_columns = "m")
但是,我不断收到此错误消息:
Warning message:
In data.table::alloc.col(.data, ncol(.data) + length(unique_vals)) :
tl (64004) is greater than 10,000 items over-allocated (l = 15170). If you didn't set the datatable.alloccol option to be very large, please report to data.table issue tracker including the result of sessionInfo()
我了解到,当您创建一个太大而无法处理的数据表时会发生这种情况,我在 StackOverflow 上发现
默认在 v1.8.8 中:
options()$datatable.alloccol 最大值(100, 2 * ncol(DT)) 而且它可能不是最好的默认值,您应该尝试将其更改为:
options(datatable.alloccol = quote(max(100L, ncol(DT)+64L))
但即使在尝试之后,我也会收到相同的错误消息。
我还了解到,您可以使用 alloc.col 函数将 data.table 中所需的列数量预先分配给一个大于预期 ncol 的数字。
例如:
alloc.col(myDataTable, 7021)
但不幸的是,这对我来说不起作用,可能是因为我在 fastDummies 代码之前或之后使用它。
如何创建虚拟变量并以函数方式分配列数?
【问题讨论】: