R NSE挑战:突破德帕尔斯(替代品(…)

R NSE挑战:突破德帕尔斯(替代品(…),r,nse,non-standard-evaluation,R,Nse,Non Standard Evaluation,让我们定义一下: f <- function(x) deparse(substitute(x)) f@Roland是正确的。由于未对x求值,因此您无法向f提供无法逐字转换为字符串的表达式。基本R中的准旋转由bquote()处理,它有一个(机制,其工作原理类似于rlang的: # Quasiquotation with base R f1 <- function(x) bquote( .(substitute(x)) + 5 ) # Quasiquotation with rla

让我们定义一下:

f <- function(x) deparse(substitute(x))

f@Roland是正确的。由于未对
x
求值,因此您无法向
f
提供无法逐字转换为字符串的表达式。基本R中的准旋转由
bquote()
处理,它有一个
机制,其工作原理类似于rlang的

# Quasiquotation with base R
f1 <- function(x) bquote( .(substitute(x)) + 5 )


# Quasiquotation with rlang
f2 <- function(x) rlang::expr( !!rlang::enexpr(x) + 5 )

e1 <- f1(y)               # y + 5
e2 <- f2(y)               # y + 5
identical(e1, e2)         # TRUE
eval(e1, list(y=10))      # 15
#带底R的准旋转

不,没有<代码>x
永远不会被计算。因此,
f(abc)
是获得此输出的唯一可能的方法。用例是什么?你想干什么?还是这只是一些晦涩难懂的琐事挑战?@MrFlick晦涩难懂的琐事挑战-我不是想把它藏在帖子里!这是由最近一个关于在程序中使用一个内部依赖deparse/substitute的包的问题引起的。当然,对于包开发人员来说,这是一个糟糕的选择,但我想知道是否真的没有办法解决这个问题。