子集闭包以使用 cat 或 print 方法打印它的一部分

Subsetting closure to print part of it with cat or print methods

我想创建打印方法、打印对象 class、颜色和 3d 表面公式。 但是在对象调用中,这个曲面公式需要保持现在的样子,所以才用了bodysubstitute。 所以我的方法正确打印 class 和颜色,但是对于表面公式 cat 不起作用并且 print 给出以下输出,即 closure

您可以 deparse fbody 将其转换为字符:

print.mychr <- function(object) {
  `%G%` <- paste0
  cat("\nObject has class: ", class(object),
        ", color: ", as.character(object$col),
        ", formula: ", deparse(body(object$f)))
}

# object call
chr1 <- chrt(c(-6, 6), 
             n = 30, 
             1+5*exp(-x^2 - y^2),
             col = 'blue')
print(chr1)
#> 
#> Object has class:  mychr , color:  blue , formula:  1 + 5 * exp(-x^2 - y^2)

reprex package (v2.0.1)

于 2022-05-28 创建

使用as.list并打印第三个元素,即公式。

print.mychr <- function(object) {
  `%G%` <- paste0
  cat("\nObject has class: " %G% class(object) %G% 
        ", color: " %G% as.character(object$col) %G% "\n\n")
  print(as.list(object$f)[[3]])
}

print(chr1)
# Object has class: mychr, color: blue
# 
# 1 + 5 * exp(-x^2 - y^2)