我有一个继承自 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 的行为相同
最佳答案
dplyr
利用 tibble 包,其中发生从 data.frame 到 tibble 的转换,为参数分配三个类。 unclass()
在此之前被调用,但是 unclass'ing 确实不将对象的状态剥离为 S4 对象,因此会出现上述警告。
简而言之,这是dplyr
内部的问题。我认为您必须为泛型制作包装器。
关于r - 继承自 data.frame 的 S4 对象:删除 dplyr::filter 中的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40187093/