【发布时间】:2014-10-21 01:09:38
【问题描述】:
我有一个已经使用 data.frame 上下文编写的项目。为了改善计算时间,我试图利用使用 data.table 的速度来代替。我的方法是构建读取帧的包装函数,将它们转换为表格,进行计算,然后再转换回帧。这是一个简单的例子......
FastAgg<-function(x, FUN, aggFields, byFields = NULL, ...){
require('data.table')
y<-setDT(x)
y<-y[,lapply(X=.SD,FUN=FUN,...),.SDcols = aggFields,by=byFields]
y<-data.frame(y)
y
}
我遇到的问题是,在运行此函数后 x 已转换为表格,然后我使用 data.frame 表示法编写的代码行失败。如何确保我输入的 data.frame 没有被运行函数改变?
【问题讨论】:
-
哇,即使这样做也会改变原来的 data.frame,这是我没想到的:
dat <- data.frame(a=1); dat2 <- dat; setDT(dat2); is.data.table(dat);老实说,这对我来说似乎有问题。 -
使用
as.data.table而不是setDT。 -
@AnandaMahto - 这似乎确实有效。我收集
setDT会导致问题,因为它在不复制的情况下更改对象,<-在我的示例中可能不会这样做,直到有其他东西作用于它。 -
@thelatemail,如果您查看 R 公共房间,我最近在向 Arun 询问相关的事情。建议在函数中使用
as.data.table代表data.frames 和copy代表data.tables。
标签: r data.table