“ Tibble”的行子集会丢失自定义s3类

时间:2019-01-08 01:52:00

标签: r dataframe tidyverse tibble

如果我从数据框中提取一行,则我的自定义s3类保持不变:

test_df = iris

class(test_df) <- c("test_class", class(test_df))

class(test_df[1,])
[1] "test_class" "data.frame"

但这不适用于小技巧:

test_df <- as_tibble(test_df)
class(test_df) <- c("test_class", class(test_df))
class(test_df[1,])
[1] "tbl_df"     "tbl"        "data.frame"

有没有解决的办法? 谢谢

1 个答案:

答案 0 :(得分:1)

答案来自Hadley Advanced R book的s3部分。您必须定义一个类构造函数和一个新的[函数。

new_test <- function(x, ...) {

  structure(x, class = c("test_class", class(x)))
}

`[.test_class` <- function(x, ...) {
  new_test(NextMethod())
}

test_df <- iris
test_df <- as_tibble(test_df)
class(test_df) <- c("test_class", class(test_df))
class(test_df[1,])
[1] "tbl_df"     "tbl"        "data.frame"