包中 tibble 子类的自定义格式

问题描述 投票:0回答:1

我正在尝试实现

tbl
的子类来调整数据的打印方式。该代码是包的一部分。

我已阅读文档并使用了这些行:

as_data_test <- function(...) {
  tibble::new_tibble(..., class = "data_test")
}

tbl_format_header.data_test <- function(x, setup, ...) {
  cli::style_italic("A Data Test = ", setup$tbl_sum)
}

然后我使用

devtools::load_all(".")
加载包。但是当我尝试打印我的
data_test
对象时,它 not 使用自定义
tbl_format_header
函数:

devtools::load_all(".")
# i Loading datatesteR
as_data_test(mtcars)
# # A tibble: 32 x 11
#      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
#  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
#  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
#  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
#  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
# 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# # i 22 more rows
# # i Use `print(n = ...)` to see more rows

如您所见,仅打印默认标题。在

browser
中进行
tbl_format_header.data_test
调用可确认我的方法从未被调度。如果我将相同的代码直接放入 R 控制台,一切都会变得非常顺利。

如何在我的

devtools
工作流程中获得自定义打印?

r devtools tibble
1个回答
0
投票

首先,更一般地说,如果您想实现 S3 泛型的方法,则需要导出它。如果您使用 roxygen2,您可以在

#' @export
类的方法上方添加
tbl_sum
。这会将以下内容添加到您的
NAMESPACE
文件中:

S3method(tbl_format_header,data_test)

第二(与前述相反),这对于

tbl_sum
不起作用,因为它不存在于你的包的命名空间中。在这种情况下,您可以使用 roxygen2 的
@exportS3Method
:

#' @exportS3Method pillar::tbl_format_header
tbl_format_header.data_test <- function(x, setup, ...) {
  cli::style_italic("A Data Test = ", setup$tbl_sum)
}

这会将您的命名空间修改为:

S3method(pillar::tbl_format_header,data_test)

来源:R 包,第 11.9 章

© www.soinside.com 2019 - 2024. All rights reserved.