我很难理解setDT()
函数的本质.当我阅读SO上的代码时,我经常遇到使用setDT()
来创建数据.桌子当然,data.table()
的使用无处不在.我觉得我已经牢牢地理解了data.table()
的本质,但setDT()
的相关性却让我不知所措.?setDT
告诉我:
setDT
转换列表(已命名和未命名)和数据.帧到数据.表by reference.
以及:
用
data.table
种说法,所有set*
个函数都通过引用来更改输入.也就是说,除了一列大小的临时工作内存之外,根本不复制任何内容.
这让我觉得我应该只用setDT()
来制作一个数据.桌子,对吗?setDT()
只是一个数据列表.桌子转换器?
library(data.table)
a <- letters[c(19,20,1,3,11,15,22,5,18,6,12,15,23)]
b <- seq(1,41,pi)
ab <- data.frame(a,b)
d <- data.table(ab)
e <- setDT(ab)
str(d)
#Classes ‘data.table’ and 'data.frame': 13 obs. of 2 variables:
# $ a: Factor w/ 12 levels "a","c","e","f",..: 9 10 1 2 5 7 11 3 8 4 ...
# $ b: num 1 4.14 7.28 10.42 13.57 ...
# - attr(*, ".internal.selfref")=<externalptr>
str(e)
#Classes ‘data.table’ and 'data.frame': 13 obs. of 2 variables:
# $ a: Factor w/ 12 levels "a","c","e","f",..: 9 10 1 2 5 7 11 3 8 4 ...
# $ b: num 1 4.14 7.28 10.42 13.57 ...
# - attr(*, ".internal.selfref")=<externalptr>
在这种情况下似乎没有什么不同.在另一个例子中,差异是显而易见的:
ba <- list(a,b)
f <- data.table(ba)
g <- setDT(ba)
str(f)
#Classes ‘data.table’ and 'data.frame': 2 obs. of 1 variable:
# $ ba:List of 2
# ..$ : chr "s" "t" "a" "c" ...
# ..$ : num 1 4.14 7.28 10.42 13.57 ...
# - attr(*, ".internal.selfref")=<externalptr>
str(g)
#Classes ‘data.table’ and 'data.frame': 13 obs. of 2 variables:
# $ V1: chr "s" "t" "a" "c" ...
# $ V2: num 1 4.14 7.28 10.42 13.57 ...
# - attr(*, ".internal.selfref")=<externalptr>
我应该什么时候用setDT()
?什么使setDT()
相关?为什么不让原来的data.table()
函数能够实现setDT()
的功能呢?