alg*_*ruh 0 expression r metaprogramming r-s3
我想覆盖某个类的绘图方法。我希望将表达式字符串用作轴标签。然而,方法调度似乎以某种方式评估表达式,因此我无法按照我预期的方式检索原始表达式(抱歉,如果我在这里使用了错误的词汇)。下面是一个最小的例子:
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"
Run Code Online (Sandbox Code Playgroud)
我的期望是plot.s返回“variable_name”,但它没有返回。为什么会这样以及如何补救?
这似乎是该rlang::enexpr功能的错误或误用。我不知道这个函数(它的文档是通常的 tidyverse 大杂烩,没有任何真正的解释),所以这是做你想做的事情的基本方法:
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"
Run Code Online (Sandbox Code Playgroud)
创建于 2023 年 12 月 15 日,使用reprex v2.0.2