子集闭包以使用 cat 或 print 方法打印它的一部分
Subsetting closure to print part of it with cat or print methods
我想创建打印方法、打印对象 class、颜色和 3d 表面公式。
但是在对象调用中,这个曲面公式需要保持现在的样子,所以才用了body
和substitute
。
所以我的方法正确打印 class 和颜色,但是对于表面公式 cat
不起作用并且 print
给出以下输出,即 closure
您可以 deparse
f
的 body
将其转换为字符:
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)
我想创建打印方法、打印对象 class、颜色和 3d 表面公式。
但是在对象调用中,这个曲面公式需要保持现在的样子,所以才用了body
和substitute
。
所以我的方法正确打印 class 和颜色,但是对于表面公式 cat
不起作用并且 print
给出以下输出,即 closure
您可以 deparse
f
的 body
将其转换为字符:
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)