从data.frame继承的S4对象:删除dplyr :: filter中的警告

时间:2016-10-22 00:21:41

标签: r inheritance dplyr s4

我有一个继承自data.frame的S4类:

> setClass("Foo", contains="data.frame")
> x <- new("Foo", data.frame(a=1:2))

现在dplyr::filter有效,但会发出警告:

> x %>% dplyr::filter(a > 1)
  a
1 2
Warning message:
In class(x) <- c("tbl_df", "tbl", "data.frame") :
  Setting class(x) to multiple strings ("tbl_df", "tbl", ...); result
  will no longer be an S4 object

有什么好方法可以摆脱这种警告吗?我可以创造一个新的 filter的泛型,并将dplyr版本包装在这个东西中 像

dplyr::filter(as.data.frame(unclass(x)), ...)

但是,为了避免这样的额外工作,这不是继承的重点吗?

此警告是否与dplyr无法识别S4对象有关?

编辑:dplyr 0.4.3和0.5.0的相同行为

1 个答案:

答案 0 :(得分:2)

dplyr使用tibble包,其中从data.frame转换为tibble,为参数分配三个类。在此之前调用unclass(),但是未分类的将其状态的对象剥离为S4对象,因此发生上述警告。

简而言之,这是dplyr中的问题。我认为你必须为仿制药制作包装纸。