library(rlang)
myquo <- quo((Temp - 32) / 1.8)
eval_tidy(myquo, data = as_data_mask(datasets::airquality)) # works
e <- as_env(datasets::airquality, parent = global_env())
eval_tidy(myquo, data = as_data_mask(list(), parent = e)) # error
我希望在Temp
中找到e
。我在做什么错了?
PS:我有R版本3.5.0,并已使用最新的CRAN和GitHub版本的{rlang}对此进行了测试。
答案 0 :(得分:1)
我认为自提出问题以来,文档可能已经更新,但是对于新访问者,as_data_mask的Rlang文档的相关部分为:
父级已弃用。此参数不再有效。数据掩码的父级可通过以下任一方式确定:
- eval_tidy()的env参数
- 合适的环境
因此,在eval_tidy(myquo, data = as_data_mask(list(), parent = e))
的情况下,eval_tidy的env
和myquo
上的quosure env都是全局env,数据掩码本身为空,因此为什么{{1 }}未找到。
Temp
可以工作,但是其中有一个不必要的调用,因为eval_tidy的数据argumnet仍然会将data.frame转换为数据掩码,所以最简单的方法是。
eval_tidy(myquo, data = as_data_mask(datasets::airquality))
另一方面,如果您确实想在eval_tidy(myquo, data = datasets::airquality)
中明确指定环境,则可以使用eval_tidy
代替expr
quo