数据掩码找不到变量

时间:2018-08-13 21:35:29

标签: r tidyeval

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}对此进行了测试。

1 个答案:

答案 0 :(得分:1)

我认为自提出问题以来,文档可能已经更新,但是对于新访问者,as_data_mask的Rlang文档的相关部分为:

  

父级已弃用。此参数不再有效。数据掩码的父级可通过以下任一方式确定:

     
      
  • eval_tidy()的env参数
  •   
  • 合适的环境
  •   

因此,在eval_tidy(myquo, data = as_data_mask(list(), parent = e))的情况下,eval_tidy的envmyquo上的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