Подмножества строк `Tibble` теряют пользовательский класс s3 - PullRequest
0 голосов
/ 08 января 2019

Если я извлекаю строку из фрейма данных, мой пользовательский класс 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 голосов
/ 08 января 2019

Ответ приходит из раздела s3 Advanced R book Хедли . Вы должны определить функцию конструктора класса и новую функцию [.

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"
...