许多帮助页面的示例采用了这样的形式,将现有的输出分配给quo:
quo <- quo(letters)
quo <- quo(toupper(!! quo))
quo
eval_tidy(quo)
很明显,这些赋值不会像通常那样覆盖quo函数(因为它连续两次) . 一流的对象,以及所有这些 .
所以我对正在发生的事情的最好猜测是,这不是一个正常的任务,而是现状的分配形式,现在< - . 但我还没有任何关于此的信息 .
非 生产环境 性:
getAnywhere(现状< - )
getAnywhere(现状<-
)
getAnywhere(quo <-
)
rlang :::现状< -
rlang :::现状<-
rlang :::quo <-
所以我想要一个可以告诉我作业形式是什么以及它如何运作的人,如果我所看到的不是作业形式,那么更是如此,而是相当一些方面“[q] uo self - 在自己的环境中评估 . “
最后,如果在某个地方有关于此功能或用法的可访问文档,我想知道我是如何找到它的,如果没有,我应该告诉哈德利 . 他如何保持这么多的盘子旋转而不会丢掉更多的球,这对我来说是一个完全的谜 .
1 回答
您刚刚附加
rlang
,您的搜索路径现在看起来像:如果您在命令行中以交互方式执行此操作,则应在
.GlobalEnv
中执行此操作:现在
quo
或get("quo")
开始在.GlobalEnv
中搜索quo
,在那里找到它(你刚刚创建的那个)并停止:如果要查找该功能,则必须绕过
.GlobalEnv
并在其封闭环境package:rlang
中开始搜索 . 你很幸运,这就是它所在的地方:(哦,这个
namespace:rlang
你看到的不是我们找到的地方quo
,而是它的封闭环境,即's going to start its own search when it'所谓的地方 . 查看世界 Map :来源:Suraj Gupta http://blog.obeautifulcode.com/R/How-R-Searches-And-Finds-Stuff/)
如果你已经知道你正在寻找一个函数,你可以使用
pryr
中的方便fget
来忽略所有不是函数的东西:(注意:当您编写自己的函数时,
match.fun
也可以派上用场) .或者你可以让R变聪明,并且直接使用parens,R会知道它必须寻找一个函数,这是在以下所做的:
(还比较:
错误消息提示R无法找到/查找,有和没有parens . )
现在为了好玩,让我们附上整个tidyverse:
搜索路径变得更加混乱:
如果我们很好奇并想知道找到
quo
的位置,我们可以使用pryr
来自pryr
. 同样,我们应该绕过.GlobalEnv
并从其封闭环境package:forcats
开始,例如:惊喜,
quo
现在在package:dplyr
而不是package:rlang
中找到 . 这是因为package:dplyr
出现在搜索路径之前,并且当它发生时,它会从rlang
重新导出quo
以使其在dplyr
中直接可用 .