【发布时间】:2014-03-20 16:11:31
【问题描述】:
假设我正在使用 R 的反引号运算符 bquote 构建表达式,并且我想在列表中的特定位置“拼接”(即,丢失列表的外括号)。
例如,我有表达式“5+4”,我想在它的开头添加一个“6-”,而不使用字符串操作(即,完全对符号结构进行操作) .
所以:
> b = quote(5+4)
> b
5 + 4
> c = bquote(6-.(b))
> c
6 - (5 + 4)
> eval(c)
[1] -3
我希望返回“6-5+4”的评估,所以 5。
在普通的 lisp 中,反引号“`”运算符带有一个拼接运算符“,@”,可以做到这一点:
CL-USER>
(setf b `(5 + 4))
(5 + 4)
CL-USER>
(setf c `(6 - ,@b))
(6 - 5 + 4)
CL-USER>
(setf c-non-spliced `(6 - ,b))
(6 - (5 + 4))
CL-USER>
我尝试在 R 中使用 .@(b),但没有奏效。还有其他想法吗?重申一下,我不想诉诸字符串操作。
【问题讨论】:
-
我认为从根本上讲,这都是“字符串操作”。
标签: r metaprogramming