目前还不清楚你的意思是“我显然不能应用适用于data.frames而不适用于data.table的函数”。
许多功能按照您的预期工作,无论是应用于data.frame
还是应用于data.table
。特别是,如果你读的帮助页?data.table
,你会发现在说明书的第一段这个特定的行:
由于data.table
是一个data.frame
,它是有R的功能和封装兼容是only
接受data.frame
。
您可以测试这一点你自己:
library(data.table)
CARS <- data.table(cars)
下都应该给你相同的结果。他们不是“数据表”的做事方式,但我刚从我的脑海中弹出一些东西来向你展示许多(大多数?)函数可以与data.table
一样用于你可以使用data.frame
(但在那个时候,你错过了data.table
必须提供的所有优秀内容)。
with(cars, tapply(dist, speed, FUN = mean))
with(CARS, tapply(dist, speed, FUN = mean))
aggregate(dist ~ speed, cars, as.vector)
aggregate(dist ~ speed, CARS, as.vector)
colSums(cars)
colSums(CARS)
as.matrix(cars)
as.matrix(CARS)
t(cars)
t(CARS)
table(cut(cars$speed, breaks=3), cut(cars$dist, breaks=5))
table(cut(CARS$speed, breaks=3), cut(CARS$dist, breaks=5))
cars[cars$speed == 4, ]
CARS[CARS$speed == 4, ]
但是,在某些情况下,这不起作用。比较:
cars[cars$speed == 4, 1]
CARS[CARS$speed == 4, 1]
为了更好地理解这一点,我建议您阅读常见问题。特别是在这个问题上总结了几个相关的问题:what you can do with data.frame that you can't in data.table。
如果你的问题是更普遍,“可以将对象有多个类?”,那你就是从自己的探索,是的,它可以看到。欲了解更多信息,你可以阅读this page from Hadley's devtools wiki。
类还影响事物如何打印对象以及它们如何与其他功能交互。
考虑rle
函数。如果你看看class
,它会返回“rle”,如果你看看它的str
,它就会显示它是一个列表。
> x <- rev(rep(6:10, 1:5))
> y <- rle(x)
> x
[1] 10 10 10 10 10 9 9 9 9 8 8 8 7 7 6
> y
Run Length Encoding
lengths: int [1:5] 5 4 3 2 1
values : int [1:5] 10 9 8 7 6
> class(y)
[1] "rle"
> str(y)
List of 2
$ lengths: int [1:5] 5 4 3 2 1
$ values : int [1:5] 10 9 8 7 6
- attr(*, "class")= chr "rle"
由于各列表项的长度是一样的,你可能会认为,你可以方便地使用data.frame()
将其转换为一个data.frame
。让我们尝试:
> data.frame(y)
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) :
cannot coerce class ""rle"" to a data.frame
> unclass(y)
$lengths
[1] 5 4 3 2 1
$values
[1] 10 9 8 7 6
> data.frame(unclass(y))
lengths values
1 5 10
2 4 9
3 3 8
4 2 7
5 1 6
或者,让我们另一个class
添加到对象,并尝试:
> class(y) <- c(class(y), "list")
> y ## Printing is not affected
Run Length Encoding
lengths: int [1:5] 5 4 3 2 1
values : int [1:5] 10 9 8 7 6
> data.frame(y) ## But interaction with other functions is
lengths values
1 5 10
2 4 9
3 3 8
4 2 7
5 1 6
一个相关的问题http://stackoverflow.com/questions/13618488/what-you-can-do -with数据帧,也就是说,你-着,在数据表 – mnel