gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:28:18 28 4
gpt4 key购买 nike

我正在开发一个依赖于向数据框添加类和属性的包,并且希望能够使用 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/

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