gpt4 book ai didi

r - 剪接R中的bquote

转载 作者:行者123 更新时间:2023-12-04 04:11:22 25 4
gpt4 key购买 nike

假设我正在使用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),但这没有用。还有其他想法吗?重申一下,我不想诉诸字符串操作。

最佳答案

这是个有趣的问题。在玩了一点之后,这就是我为您的特定示例所能想到的全部。

> b <- quote(5 + 4)
> b[[2]] <- bquote(6 - .(b[[2]]))
> b
6 - 5 + 4
> eval(b)
[1] 5

不幸的是,鉴于您必须考虑评估顺序等事实,这可能很难一概而论。

关于r - 剪接R中的bquote,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21895585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com