R 获取间接传递给函数的参数的名称
我想为S3对象编写一个自定义打印函数,并在下面仅使用对象的名称获得所需的结果。我怎样才能做到这一点R 获取间接传递给函数的参数的名称,r,R,我想为S3对象编写一个自定义打印函数,并在下面仅使用对象的名称获得所需的结果。我怎样才能做到这一点 print.Foo <- function(x, ...) { cat(paste0(x, " (passed 'print' via ", deparse(substitute(x)), ")")) } boo <- 16 boo #> [1] 16 class(boo) <- "Foo" # sub
print.Foo <- function(x, ...) {
cat(paste0(x, " (passed 'print' via ", deparse(substitute(x)), ")"))
}
boo <- 16
boo
#> [1] 16
class(boo) <- "Foo"
# sub-optimal outcome
show(boo)
#> 16 (passed 'print' via object)
我想通过以下电话获得上述所需结果:
boo
#> 16 (passed 'print' via x)
我修补了以下功能,但无法使其正常工作:
setMethod(
f = "show",
signature = "Foo",
function(object) {
cat(paste0(object, " (passed 'show' via ", deparse(substitute(object)), ")"))}
)
show.Foo <- function(object) {
cat(paste0(object, " (passed 'show' via ", deparse(substitute(object)), ")"))
}
setMethod(
f=“show”,
signature=“Foo”,
功能(对象){
cat(粘贴0(对象,”(通过“显示”传递),deparse(替换(对象)),”))
)
show.Foo您试图做的事情不太管用,因为名称指向对象值,但对象值实际上并不知道它们的名称。连接是单向的。您可以查看调用堆栈以查看传递了什么,但是R控制台中的REPL使用一个特殊函数调用print()
,而不传递您键入的变量名。无名对象出现在列表等容器中,在这种情况下,print()
应该显示什么还不清楚。有时,多个名称可能指向同一对象。您只是想提醒用户他们刚刚键入的变量的名称吗?感谢您澄清了底层机制。我想使用此功能为用户提供一个命令,用户可以轻松地复制并粘贴到控制台。类似于:cat(paste0(“您可以使用“”、deparse(替换(x))、“^2”来计算此对象的平方。\n”)
substitute()
技巧仅对承诺有效,然后再对其进行评估。在控制台中,表达式在打印前进行求值。当调用隐式print()
时,无法获取在控制台上计算的表达式。它与print(boo)
一起工作,因为函数和参数都是同时求值的(并且可以绕过隐式print()
调用)。似乎不可能按你的要求去做。这并不适用于所有函数,只适用于在控制台上调用的隐式print()
。
setMethod(
f = "show",
signature = "Foo",
function(object) {
cat(paste0(object, " (passed 'show' via ", deparse(substitute(object)), ")"))}
)
show.Foo <- function(object) {
cat(paste0(object, " (passed 'show' via ", deparse(substitute(object)), ")"))
}