如何访问传递给 R 中覆盖泛型的原始表达式?

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

我想覆盖某个类的绘图方法。我希望将表达式字符串用作轴标签。然而,方法调度似乎以某种方式评估表达式,因此我无法按照我预期的方式检索原始表达式(抱歉,如果我在这里使用了错误的词汇)。下面是一个最小的例子:

library(rlang)

make_s = function(x) structure(x, class = "s")


plot2= function(x) print(enexpr(x))
plot.s = function(x) print(enexpr(x))

variable_name = make_s(1)
plot2(variable_name)
#Output:
#variable_name
plot(variable_name)
#Output:
#[1] 1
#attr(,"class")
#[1] "s"

我的期望是

plot.s
返回“variable_name”,但它没有返回。这是为什么以及如何补救?

r expression metaprogramming r-s3
1个回答
0
投票

这似乎是

rlang::enexpr
函数的错误或误用。我不知道这个函数,所以这是做你想做的事情的基本方法:

make_s = function(x) structure(x, class = "s")

plot.s = function(x) print(deparse1(substitute(x)))

variable_name = make_s(1)
plot(variable_name)
#> [1] "variable_name"

创建于 2023-12-15,使用 reprex v2.0.2

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