r - dplyr 动词删除自定义类和属性?

标签 r dplyr

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

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

示例

class(mtcars) <- c("new_class", class(mtcars))
attr(mtcars, "foo") <- "bar"

检查结构表明 mtcars 现在包含新的类和属性

> mtcars %>% str
Classes ‘new_class’, ‘new_class’ and 'data.frame':  32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
 - attr(*, "foo")= chr "bar"

但是当我使用filter时,它似乎丢失了类和属性。

> 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_,它使用data.frame的方法(因为new_class<没有filter方法filter_.data.frame 然后调用 tbl_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>

tbl_df 的强制删除了额外的类,但保留了属性 foo

mtcars %>% tbl_df %>% str

过滤似乎丢失了属性 foo

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

关于r - dplyr 动词删除自定义类和属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29004631/

相关文章:

R data.table 函数无法识别已指定的参数

r - 如何在数据框R的顶部添加行

r - R 中具有限制系数的 ARIMA 的 AIC、BIC 值

r - 是否有一个 r 函数可以重复一个数字,限制为 ";"x 次

r - 无法将 tidyselect `everything()` 与 `group_by()` 和 `fill()` 结合使用

r - 合并两列,但更改特定变量的名称

r - 将参数传递给 R 中的自定义函数和过滤器

r - 无法使用 R 将 Inf 替换为 dplyr 链中的自定义值

r - dplyr::count() 多列

r - 按值选择多个观察值