R语言中substitute函数如何选择对象的反解析表示?
关于
base::substitute的行为疑问 base::substitute的官方文档描述如下:
替换操作通过检查解析树的每个组件进行:如果组件不是‘env’中绑定的符号,则保持不变;如果是promise对象,则用promise的表达式槽替换该符号;如果是普通变量,则替换其值,除非‘env’是.GlobalEnv,此时符号保持不变。
这段描述最后一句里的“值”表述模糊:当需要将对象的反解析表示放入返回的language对象中时,这个表示的选择逻辑到底是怎样的?
我原本假设它使用base::deparse生成反解析结果,但实际测试的行为并不一致:
e <- new.env() e$df <- tibble::tibble(1:5) e$env <- new.env() e$x <- 1 substitute(x+1, e) # 1 + 1 substitute(df+1, e) # list(`1:5` = 1:5) + 1(与deparse(e$df)结果不符) substitute(env+1, e) # <environment> + 1 (与deparse(e$env)结果一致) # 若待替换的表达式是名称,则直接返回对象本身 #(无需返回language对象,无需反解析) identical(substitute(df, e), e$df) identical(substitute(env, e), e$env)
内容的提问来源于stack exchange,提问作者user615536
相关产品推荐
相关产品推荐

