首页 > 解决方案 > 在没有某些列的情况下创建的对象会修改其他对象

问题描述

我开始使用带有 data.table 的 r-studio 来学习 r,所以我很抱歉问这个基本的东西。这就是我所拥有的(在 r-markdown 上工作):

对象 1:

ps.data <- fread("database.csv") 

我正在尝试创建一个与“ps.data”相同的对象,但删除了“database.csv”具有的 5 个列(同时),但更改了“ps.data”。到目前为止,我已经尝试过这个:

第一次尝试:有效,但效率极低。

ps.data2<-ps.data[,"col1":=NULL]
ps.data3<-ps.data2[,"col2":=NULL]
...
ps.data6<-ps.data5[,"col5":=NULL]

然后删除我不需要的所有对象。

第二次尝试:即使它创建了没有删除列的对象,但问题是现在我打开“ps.data”并且代码也删除了该列中的列。

ps.data2<- ps.data[, c("col1","col2","col3","col4","col5"):=NULL]

标签: rdata.table

解决方案


编辑:我最初完全错了。这是使用data.table::copy命令强制 data.table 复制数据的解决方案,而不是仅引用它。

ps.data2<- copy(ps.data)
ps.data2[, c("col1","col2","col3","col4","col5"):=NULL]

原因如下: 准确了解 data.table 何时是对另一个 data.table 的引用(相对于副本)

基本上,当您 put 时ps.data2<-ps.data, data.table 只是创建对原始数据的引用。关于何时通过引用创建或实际复制事物,这看起来像是一个更复杂的讨论,但请查看上面的链接。


推荐阅读