gpt4 book ai didi

r - 过度分配真实长度超过 1000 次的潜在问题

转载 作者:行者123 更新时间:2023-12-04 18:45:20 25 4
gpt4 key购买 nike

tl;dr:真实长度过度分配警告后的潜在问题是什么?

最近我做了这样的蠢事:

m <- matrix(seq_len(1e4),nrow=10)

library(data.table)
DT <- data.table(id=rep(1:2,each=5),m)
DT[,id2:=id]

#Warning message:
# In `[.data.table`(DT, , `:=`(id2, id)) :
# tl (2002) is greater than 1000 items over-allocated (ncol = 1001).
# If you didn't set the datatable.alloccol option very large,
# please report this to datatable-help including the result of sessionInfo().

DT[,lapply(.SD,mean),by=id2]

经过一些搜索后,很明显警告是由于通过引用具有太多列的 data.table 添加一列而导致的,我发现了一些相当技术性的解释(例如, this ),我可能不完全理解。

我知道我可以避免这个问题(例如,使用 data.table(id=rep(1:2,each=5),stack(as.data.frame(m))) ),但我想知道我是否应该期待在这样的警告之后出现问题(除了使用宽格式 data.table 带来的明显性能劣势)。
R version 2.15.3 (2013-03-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 LC_MONETARY=German_Germany.1252 LC_NUMERIC=C LC_TIME=German_Germany.1252

attached base packages:
[1] stats graphics grDevices datasets utils methods base

other attached packages:
[1] data.table_1.8.8 fortunes_1.5-0

最佳答案

好问题。默认在 v1.8.8 中:

> options()$datatable.alloccol
max(100, 2 * ncol(DT))

这可能不是最好的默认设置。尝试改变它:
options(datatable.alloccol = quote(max(100L, ncol(DT)+64L))

更新:我现在已将 v1.8.9 中的默认值更改为该值。

该选项仅控制分配了多少备用列指针插槽,以便 :=可以通过引用添加列。

来自 NEWS 中的 NOTES对于 v1.8.9

关于r - 过度分配真实长度超过 1000 次的潜在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com