R语言quote替换问题:如何将表达式中foo替换为x+y得到x+y+z?
解决R语言表达式合并的问题
嗨,我来帮你搞定这个问题~你遇到的情况是因为quote()函数的特性:它会原样保留你输入的表达式结构,不会去解析变量foo实际指向的x+y,所以bar里的foo只是一个符号,不是它对应的表达式。
下面给你几种实用的解决方法:
方法1:用substitute()替换符号
substitute()可以帮你把表达式里的指定符号替换成你想要的内容:
foo <- quote(x+y) bar <- substitute(expr = a + z, env = list(a = foo)) bar # 输出结果:x + y + z
这里我们告诉substitute,把表达式a + z里的a替换成foo对应的x+y。
方法2:直接修改表达式的结构
R里的表达式本质是树形的调用结构,我们可以直接修改bar的元素:
foo <- quote(x+y) bar <- quote(foo + z) # 把bar中第一个操作数(foo)替换成它对应的表达式 bar[[2]] <- foo bar # 输出结果:x + y + z
解释一下:bar的结构是call("+", quote(foo), quote(z)),bar[[2]]就是第一个加号左边的foo,我们把它替换成foo实际的值x+y,就能得到合并后的表达式。
方法3:用bquote()插入变量
bquote()支持用.来插入变量对应的表达式,写法更直观:
foo <- quote(x+y) bar <- bquote(.(foo) + z) bar # 输出结果:x + y + z
这里.(foo)会自动把foo指向的x+y插入到表达式里。
随便选一种方法都能得到你想要的x+y+z啦~
内容的提问来源于stack exchange,提问作者Евгений Шахов
相关产品推荐
相关产品推荐

