亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么Dataa.table通過引用更新名稱(DT),即使我將其賦值給另一個變量?

為什么Dataa.table通過引用更新名稱(DT),即使我將其賦值給另一個變量?

慕蓋茨4494581 2019-07-11 10:23:16
為什么Dataa.table通過引用更新名稱(DT),即使我將其賦值給另一個變量?我存儲了一個data.table作為vector:library(data.table)set.seed(42)DT <- data.table(x = runif(100), y = runif(100))names1 <- names(DT)據我所知,這是一個普通的香草字符向量:str(names1)# chr [1:2] "x" "y"class(names1)# [1] "character"dput(names1)# c("x", "y")然而,這不是普通的字符向量。這是一個神奇的字符向量!當我向data.table,這個向量會被更新!DT[ , z := runif(100)]names1# [1] "x" "y" "z"我知道這和:=按任務更新,但這對我來說還是很神奇的,正如我所期望的那樣。<-使.復制.的.data.table名字。我可以通過在c():library(data.table)set.seed(42)DT <- data.table(x = runif(100), y = runif(100))names1 <- names(DT)names2 <- c(names(DT)) all.equal(names1, names2)# [1] TRUEDT[ , z := runif(100)]names1# [1] "x" "y" "z"names2# [1] "x" "y"我的問題有兩個:為什么不names1 <- names(DT)創建data.table名字?在其他情況下,我們被明確警告<-創建副本,兩個data.tableS和data.frameS.有什么區別names1 <- names(DT)和names2 <- c(names(DT))?
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

這對我來說也是個新聞,很棒的問題。名稱向量和列指針向量都被過度分配。什么時候:=指定一個新列,它還通過引用更新了名稱向量。這可以通過不使名稱向量被過度分配來改變/修正。但是,如果在循環中添加列,則會稍微慢一些。所以最好記錄下nm <- copy(names(DT))是必需的,否則names(DT)返回引用。

查看完整回答
反對 回復 2019-07-11
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

就像我剛剛發現的那樣,我自己也開始到那里去了。.Internal(inspect())..我想我還沒意識到矢量實際上,在內部可以引用data.table-我一直以為只有data.table內部可能是對data.table.

查看完整回答
反對 回復 2019-07-11
  • 3 回答
  • 0 關注
  • 592 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號