dplyr谓词是否删除自定义类和属性?

dplyr谓词是否删除自定义类和属性?,r,dplyr,R,Dplyr,我正在开发一个依赖于向数据帧添加类和属性的包,并且希望能够使用dplyr动词 唯一的问题是它们似乎去掉了我添加到数据帧中的类和属性 示例 class(mtcars) <- c("new_class", class(mtcars)) attr(mtcars, "foo") <- "bar" 但是当我使用过滤器时,它似乎丢失了类和属性 > mtcars %>% filter(cyl == 8) %>% str 'data.frame': 14 obs. of 1

我正在开发一个依赖于向数据帧添加类和属性的包,并且希望能够使用
dplyr
动词

唯一的问题是它们似乎去掉了我添加到数据帧中的类和属性

示例

class(mtcars) <- c("new_class", class(mtcars))
attr(mtcars, "foo") <- "bar"
但是当我使用
过滤器时,它似乎丢失了类和属性

> mtcars %>% filter(cyl == 8) %>% str
'data.frame':   14 obs. of  11 variables:
 $ mpg : num  18.7 14.3 16.4 17.3 15.2 10.4 10.4 14.7 15.5 15.2 ...
 $ cyl : num  8 8 8 8 8 8 8 8 8 8 ...
 $ disp: num  360 360 276 276 276 ...
 $ hp  : num  175 245 180 180 180 205 215 230 150 150 ...
 $ drat: num  3.15 3.21 3.07 3.07 3.07 2.93 3 3.23 2.76 3.15 ...
 $ wt  : num  3.44 3.57 4.07 3.73 3.78 ...
 $ qsec: num  17 15.8 17.4 17.6 18 ...
 $ vs  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ am  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ gear: num  3 3 3 3 3 3 3 3 3 3 ...
 $ carb: num  2 4 3 3 3 4 4 4 2 2 ...
这种行为是意料之中的吗


如何解决此问题?

filter
调用
filter
,它使用
数据帧的方法(因为没有针对
new\u类
filter\uu.data.frame
的筛选方法,所以使用
tbl\u df
调用筛选方法,并使用
as.data.frame
返回
data.frame

dplyr:::filter_.data.frame
## function (.data, ..., .dots) 
## {
##     dots <- lazyeval::all_dots(.dots, ..., all_named = TRUE)
##     as.data.frame(filter_(tbl_df(.data), .dots = dots))
## }
## <environment: namespace:dplyr>
筛选似乎失去了属性
foo

mtcars %>% tbl_df %>% filter(cyl == 8) %>% str

似乎相关。感谢Henrik-这帮了我不少忙。我能够制作一个
过滤器
泛型,为我的类定义方法,并定义一个默认方法,它只指向
dplyr::filter
。类似于以下要点:
mtcars %>% tbl_df %>% str
mtcars %>% tbl_df %>% filter(cyl == 8) %>% str