首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSE挑战:突破离开(替换(...))

NSE挑战:突破离开(替换(...))
EN

Stack Overflow用户
提问于 2019-10-12 00:06:32
回答 1查看 65关注 0票数 0

让我们定义一下:

代码语言:javascript
复制
f <- function(x) deparse(substitute(x))

挑战:找到<something>,以便f(<something>)返回"abc"。当然,不包括f(abc)

使用“整洁的NSE",即准引号,这是非常容易的。然而,根据NSE参考文献(123),这是不可能的,因为substitute是一个纯引用(而不是准引用)函数。

我想知道是否有任何晦涩或没有文档记录的东西(并不是那么少见!)这允许在substitute中取消引用,因此面临挑战。

EN

回答 1

Stack Overflow用户

发布于 2019-10-12 03:23:32

@Roland是正确的。因为不计算x,所以您可以提供给f的任何表达式都不会被逐字转换为字符串。基本R中的准引号由bquote()处理,它有一个.()机制,其工作方式类似于rlang的!!

代码语言:javascript
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58344944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档