使用purrr::partial封装glue后与purrr::map搭配报错:.x未找到
报错原因解析
glue的变量查找规则:glue解析模板时,会在自身被调用的环境里查找变量,而非函数定义的环境。当你在
map的lambda(~)里直接调用glue,lambda的环境里包含.x,所以glue能正常找到这个变量。partial的环境绑定特性:用
purrr::partial封装glue得到glue_css时,partial会把这个新函数绑定到创建它的环境(此处为全局环境)。当你在lambda里调用glue_css,glue实际的调用环境变成了全局环境——而全局环境里根本没有.x这个变量,因此会报“.x未找到”的错误。两种调用的核心差异:
- 直接调用
glue:调用环境是lambda的局部环境,.x存在,模板正常解析。 - 调用
glue_css:partial固定了glue的调用环境为全局环境,lambda里的.x不在这个环境的查找链中,自然无法被找到。
- 直接调用
可以用代码验证环境差异:
# 查看glue_css绑定的环境 environment(glue_css) # 输出:<environment: R_GlobalEnv>
内容的提问来源于stack exchange,提问作者MLEN
相关产品推荐
相关产品推荐

