x x %>% dplyr::filter(a > 1) -6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:22:34 26 4
gpt4 key购买 nike

我有一个继承自 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com