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

标签 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 的行为相同

最佳答案

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

简而言之,这是dplyr 内部的问题。我认为您必须为泛型制作包装器。

关于r - 继承自 data.frame 的 S4 对象:删除 dplyr::filter 中的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40187093/

相关文章:

R 用非 NA 值的递增/递减替换 NA

r - 安装 devtools 包的问题

r - R CMD 检查错误 : Packages required but not available

c# - 继承与类型标志

c++ - 与 C++ 继承混淆

javascript - JavaScript 中的原型(prototype)继承约定

r - 来自 dplyr 的 bind_rows() 问题 - 包加载错误?

r - 如何使用 tidyverse 管道重命名具有行字符值的列?

r - 如何使 ggplot2 在此图中排除零值?

r - 当数据不在表中时,如何将文本文件读入 R