gpt4 book ai didi

r - 通过引用在函数中添加大量列

转载 作者:行者123 更新时间:2023-12-04 10:16:38 25 4
gpt4 key购买 nike

我不知道在这种情况下 data.table 发生了什么:

fooFun <- function(tbl, totCols) {
tbl[, paste0("col", 1:totCols) := 0]
}

从一个空的 1 列数据表开始。

> tbl = data.table(initialCol=double())

然后通过引用添加99列:

> fooFun(tbl, 99)
> colnames(tbl)
[1] "initialCol" "col1" "col2" "col3" "col4" "col5" "col6" "col7" "col8" "col9" "col10" "col11" "col12" "col13"
[15] "col14" "col15" "col16" "col17" "col18" "col19" "col20" "col21" "col22" "col23" "col24" "col25" "col26" "col27"
[29] "col28" "col29" "col30" "col31" "col32" "col33" "col34" "col35" "col36" "col37" "col38" "col39" "col40" "col41"
[43] "col42" "col43" "col44" "col45" "col46" "col47" "col48" "col49" "col50" "col51" "col52" "col53" "col54" "col55"
[57] "col56" "col57" "col58" "col59" "col60" "col61" "col62" "col63" "col64" "col65" "col66" "col67" "col68" "col69"
[71] "col70" "col71" "col72" "col73" "col74" "col75" "col76" "col77" "col78" "col79" "col80" "col81" "col82" "col83"
[85] "col84" "col85" "col86" "col87" "col88" "col89" "col90" "col91" "col92" "col93" "col94" "col95" "col96" "col97"
[99] "col98" "col99"

一切看起来都很好。现在添加第 100 列:

> fooFun(tbl, 100)
> colnames(tbl)
[1] "initialCol" "col1" "col2" "col3" "col4" "col5" "col6" "col7" "col8" "col9" "col10" "col11" "col12" "col13"
[15] "col14" "col15" "col16" "col17" "col18" "col19" "col20" "col21" "col22" "col23" "col24" "col25" "col26" "col27"
[29] "col28" "col29" "col30" "col31" "col32" "col33" "col34" "col35" "col36" "col37" "col38" "col39" "col40" "col41"
[43] "col42" "col43" "col44" "col45" "col46" "col47" "col48" "col49" "col50" "col51" "col52" "col53" "col54" "col55"
[57] "col56" "col57" "col58" "col59" "col60" "col61" "col62" "col63" "col64" "col65" "col66" "col67" "col68" "col69"
[71] "col70" "col71" "col72" "col73" "col74" "col75" "col76" "col77" "col78" "col79" "col80" "col81" "col82" "col83"
[85] "col84" "col85" "col86" "col87" "col88" "col89" "col90" "col91" "col92" "col93" "col94" "col95" "col96" "col97"
[99] "col98" "col99"

什么?不存在......现在在函数调用之外添加一列:

> tbl[, newCol := 5]
> colnames(tbl)
[1] "initialCol" "col1" "col2" "col3" "col4" "col5" "col6" "col7" "col8" "col9" "col10" "col11" "col12" "col13"
[15] "col14" "col15" "col16" "col17" "col18" "col19" "col20" "col21" "col22" "col23" "col24" "col25" "col26" "col27"
[29] "col28" "col29" "col30" "col31" "col32" "col33" "col34" "col35" "col36" "col37" "col38" "col39" "col40" "col41"
[43] "col42" "col43" "col44" "col45" "col46" "col47" "col48" "col49" "col50" "col51" "col52" "col53" "col54" "col55"
[57] "col56" "col57" "col58" "col59" "col60" "col61" "col62" "col63" "col64" "col65" "col66" "col67" "col68" "col69"
[71] "col70" "col71" "col72" "col73" "col74" "col75" "col76" "col77" "col78" "col79" "col80" "col81" "col82" "col83"
[85] "col84" "col85" "col86" "col87" "col88" "col89" "col90" "col91" "col92" "col93" "col94" "col95" "col96" "col97"
[99] "col98" "col99" "newCol"

一切顺利。现在添加第 100 列:

> fooFun(tbl, 100)
> colnames(tbl)
[1] "initialCol" "col1" "col2" "col3" "col4" "col5" "col6" "col7" "col8" "col9" "col10" "col11" "col12" "col13"
[15] "col14" "col15" "col16" "col17" "col18" "col19" "col20" "col21" "col22" "col23" "col24" "col25" "col26" "col27"
[29] "col28" "col29" "col30" "col31" "col32" "col33" "col34" "col35" "col36" "col37" "col38" "col39" "col40" "col41"
[43] "col42" "col43" "col44" "col45" "col46" "col47" "col48" "col49" "col50" "col51" "col52" "col53" "col54" "col55"
[57] "col56" "col57" "col58" "col59" "col60" "col61" "col62" "col63" "col64" "col65" "col66" "col67" "col68" "col69"
[71] "col70" "col71" "col72" "col73" "col74" "col75" "col76" "col77" "col78" "col79" "col80" "col81" "col82" "col83"
[85] "col84" "col85" "col86" "col87" "col88" "col89" "col90" "col91" "col92" "col93" "col94" "col95" "col96" "col97"
[99] "col98" "col99" "newCol" "col100"

它现在就在那里。现在再添加 20 个:

> fooFun(tbl, 120)
> colnames(tbl)
[1] "initialCol" "col1" "col2" "col3" "col4" "col5" "col6" "col7" "col8" "col9" "col10" "col11" "col12" "col13"
[15] "col14" "col15" "col16" "col17" "col18" "col19" "col20" "col21" "col22" "col23" "col24" "col25" "col26" "col27"
[29] "col28" "col29" "col30" "col31" "col32" "col33" "col34" "col35" "col36" "col37" "col38" "col39" "col40" "col41"
[43] "col42" "col43" "col44" "col45" "col46" "col47" "col48" "col49" "col50" "col51" "col52" "col53" "col54" "col55"
[57] "col56" "col57" "col58" "col59" "col60" "col61" "col62" "col63" "col64" "col65" "col66" "col67" "col68" "col69"
[71] "col70" "col71" "col72" "col73" "col74" "col75" "col76" "col77" "col78" "col79" "col80" "col81" "col82" "col83"
[85] "col84" "col85" "col86" "col87" "col88" "col89" "col90" "col91" "col92" "col93" "col94" "col95" "col96" "col97"
[99] "col98" "col99" "newCol" "col100" "col101" "col102" "col103" "col104" "col105" "col106" "col107" "col108" "col109" "col110"
[113] "col111" "col112" "col113" "col114" "col115" "col116" "col117" "col118" "col119" "col120"

看起来不错。现在再添加一堆:

> fooFun(tbl, 240)
> colnames(tbl)
[1] "initialCol" "col1" "col2" "col3" "col4" "col5" "col6" "col7" "col8" "col9" "col10" "col11" "col12" "col13"
[15] "col14" "col15" "col16" "col17" "col18" "col19" "col20" "col21" "col22" "col23" "col24" "col25" "col26" "col27"
[29] "col28" "col29" "col30" "col31" "col32" "col33" "col34" "col35" "col36" "col37" "col38" "col39" "col40" "col41"
[43] "col42" "col43" "col44" "col45" "col46" "col47" "col48" "col49" "col50" "col51" "col52" "col53" "col54" "col55"
[57] "col56" "col57" "col58" "col59" "col60" "col61" "col62" "col63" "col64" "col65" "col66" "col67" "col68" "col69"
[71] "col70" "col71" "col72" "col73" "col74" "col75" "col76" "col77" "col78" "col79" "col80" "col81" "col82" "col83"
[85] "col84" "col85" "col86" "col87" "col88" "col89" "col90" "col91" "col92" "col93" "col94" "col95" "col96" "col97"
[99] "col98" "col99" "newCol" "col100" "col101" "col102" "col103" "col104" "col105" "col106" "col107" "col108" "col109" "col110"
[113] "col111" "col112" "col113" "col114" "col115" "col116" "col117" "col118" "col119" "col120" "col121" "col122" "col123" "col124"
[127] "col125" "col126" "col127" "col128" "col129" "col130" "col131" "col132" "col133" "col134" "col135" "col136" "col137" "col138"
[141] "col139" "col140" "col141" "col142" "col143" "col144" "col145" "col146" "col147" "col148" "col149" "col150" "col151" "col152"
[155] "col153" "col154" "col155" "col156" "col157" "col158" "col159" "col160" "col161" "col162" "col163" "col164" "col165" "col166"
[169] "col167" "col168" "col169" "col170" "col171" "col172" "col173" "col174" "col175" "col176" "col177" "col178" "col179" "col180"
[183] "col181" "col182" "col183" "col184" "col185" "col186" "col187" "col188" "col189" "col190" "col191" "col192" "col193" "col194"
[197] "col195" "col196" "col197" "col198"

不好。

这是怎么回事?

最佳答案

@Arun 指出这个问题已经在邮件列表中得到解决:#5204 .按照该线程中的建议,我增加了创建 data.table 时分配的列指针的默认数量:

options(datatable.alloccol = 900)

这样,当在已创建的表上增加超过 100 列的数量时,它不会达到 100 列的默认预分配。这解决了在达到预分配限制时浅复制对象的潜在问题,以便它为这个 SO 问题中的测试产生预期的行为。

关于r - 通过引用在函数中添加大量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23480324/

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