gpt4 book ai didi

R 编程 : avoid copying the whole data frame when amending?

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

在修改数据帧中的一个条目时,R 似乎复制了整个数据帧。我想知道是否有办法让 R 只复制相应的数据列(例如下面的特定 INTSXP 而不是 VECSXP)来维护更改时复制策略?还有没有办法对数据帧进行就地修改?

> x<-data.frame(x=1:1000000,y=1:1000000)
> .Internal(inspect(x))
@62cd2b0 19 VECSXP g0c2 [OBJ,MARK,NAM(2),ATT] (len=2, tl=0)
@f80d0e0 13 INTSXP g0c7 [MARK] (len=1000000, tl=0) 1,2,3,4,5,...
@8ed6970 13 INTSXP g0c7 [] (len=1000000, tl=0) 1,2,3,4,5,...
ATTRIB:
@68f6b40 02 LISTSXP g0c0 []
TAG: @4e58868 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "names" (has value)
@613efd0 16 STRSXP g0c2 [] (len=2, tl=0)
@4e93038 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "x"
@4fe8bd8 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "y"
TAG: @4e62650 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "row.names" (has value)
@113bb328 13 INTSXP g0c1 [] (len=2, tl=0) -2147483648,-1000000
TAG: @4e58d38 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "class" (has value)
@113aa1d8 16 STRSXP g0c1 [MARK,NAM(2)] (len=1, tl=0)
@4ee78a0 09 CHARSXP g1c2 [MARK,gp=0x61] [ASCII] [cached] "data.frame"
> x[1,1]<-3L
> .Internal(inspect(x))
@68eb9f8 19 VECSXP g0c2 [OBJ,NAM(2),ATT] (len=2, tl=0)
@6507290 13 INTSXP g0c7 [] (len=1000000, tl=0) 3,2,3,4,5,...
@7422920 13 INTSXP g0c7 [] (len=1000000, tl=0) 1,2,3,4,5,...
ATTRIB:
@68ef738 02 LISTSXP g0c0 []
TAG: @4e58868 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "names" (has value)
@68ebaa0 16 STRSXP g0c2 [NAM(2)] (len=2, tl=0)
@4e93038 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "x"
@4fe8bd8 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "y"
TAG: @4e62650 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "row.names" (has value)
@f43c418 13 INTSXP g0c1 [] (len=2, tl=0) -2147483648,-1000000
TAG: @4e58d38 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "class" (has value)
@f43c4d8 16 STRSXP g0c1 [NAM(1)] (len=1, tl=0)
@4ee78a0 09 CHARSXP g1c2 [MARK,gp=0x61] [ASCII] [cached] "data.frame"

谢谢!

最佳答案

您应该使用 data.table为此,它正是为此目的而做的。并阅读 this reference post

R) dt<-data.table(x=1:10,y=1:10)
R) .Internal(inspect(dt))
@0x000000000dce56c0 19 VECSXP g0c7 [OBJ,NAM(1),ATT] (len=2, tl=100)
@0x000000000ebc4100 13 INTSXP g0c4 [NAM(2)] (len=10, tl=0) 1,2,3,4,5,...
@0x000000000ebc41b0 13 INTSXP g0c4 [NAM(2)] (len=10, tl=0) 1,2,3,4,5,...
ATTRIB:
@0x000000000e6c2d00 02 LISTSXP g0c0 []
TAG: @0x00000000003b0088 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "names" (has value)
@0x000000000cc99fd0 16 STRSXP g0c7 [NAM(2)] (len=2, tl=100)
@0x00000000003ddbb8 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "x"
@0x000000000734f4d8 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "y"
TAG: @0x00000000003b1d98 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "row.names" (has value)
@0x0000000014487f98 13 INTSXP g0c1 [] (len=2, tl=0) -2147483648,-10
TAG: @0x00000000003b0558 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "class" (has value)
@0x000000000ead1910 16 STRSXP g0c2 [] (len=2, tl=0)
@0x000000000753f440 09 CHARSXP g1c2 [MARK,gp=0x61] [ASCII] [cached] "data.table"
@0x000000000715f398 09 CHARSXP g1c2 [MARK,gp=0x61,ATT] [ASCII] [cached] "data.frame"
TAG: @0x000000000c3d7cc0 01 SYMSXP g1c0 [MARK] ".internal.selfref"
@0x000000000e6c1e80 22 EXTPTRSXP g0c0 []
R) dt[,y:=y+1]
R) .Internal(inspect(dt))
@0x000000000dce56c0 19 VECSXP g0c7 [OBJ,NAM(2),ATT] (len=2, tl=100)
@0x000000000ebc4100 13 INTSXP g0c4 [NAM(2)] (len=10, tl=0) 1,2,3,4,5,...
@0x000000000ebc6728 14 REALSXP g0c6 [NAM(1)] (len=10, tl=0) 2,3,4,5,6,...
ATTRIB:
@0x000000000e6c2d00 02 LISTSXP g0c0 []
TAG: @0x00000000003b0088 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "names" (has value)
@0x000000000cc99fd0 16 STRSXP g0c7 [NAM(2)] (len=2, tl=100)
@0x00000000003ddbb8 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "x"
@0x000000000734f4d8 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "y"
TAG: @0x00000000003b1d98 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "row.names" (has value)
@0x0000000014487f98 13 INTSXP g0c1 [] (len=2, tl=0) -2147483648,-10
TAG: @0x00000000003b0558 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "class" (has value)
@0x000000000ead1910 16 STRSXP g0c2 [NAM(2)] (len=2, tl=0)
@0x000000000753f440 09 CHARSXP g1c2 [MARK,gp=0x61] [ASCII] [cached] "data.table"
@0x000000000715f398 09 CHARSXP g1c2 [MARK,gp=0x61,ATT] [ASCII] [cached] "data.frame"
TAG: @0x000000000c3d7cc0 01 SYMSXP g1c0 [MARK] ".internal.selfref"
@0x000000000e6c1e80 22 EXTPTRSXP g0c0 []

关于R 编程 : avoid copying the whole data frame when amending?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384448/

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