想象一下,我通过连接生成一个R expression
对象:
x = c(expression({
a + b
b + c
}),
expression({
a + 1
b + 1
}))
这会产生一个长度为2的表达式对象:
> x
expression({
a + b
b + c
}, {
a + 1
b + 1
})
如何将其转换/折叠为单个表达式?也就是说,我正在寻找我可以在x
上执行的操作来获得相同的操作:
expression({
a + b
b + c
a + 1
b + 1
})
答案 0 :(得分:4)
这似乎有效,每个表达式都应以{
as.expression(sapply(x, function(y) as.list(y[-1])))
# expression(a + b, b + c, a + 1, b + 1)
答案 1 :(得分:3)
这并不要求每个表达式都在class Shape {
virtual bool collide(Shape &a) { ...
class Circle: public Shape {
bool collide(Circle &a) { ...
表达式中的括号中:
x + y
答案 2 :(得分:3)
x = c(expression({
a + b
b + c
}),
expression({
a + 1
b + 1
}))
collapsit = function(x) {
if(!all(sapply(x, class) == "{"))
stop("I can't collapse non-bracket expressions for you, dawg")
stuff = unlist(lapply(x[-1], function(y) as.list(y[-1])))
x[[1]][length(x[[1]])+1:length(stuff)] = stuff
x[1]
}
res = collapsit(x)
## expression({
## a + b
## b + c
## a + 1
## b + 1
## })
答案 3 :(得分:2)
这会产生预期的结果,并且可能会按比例扩大以使用reduce
或更多的输入。也就是说,我不确定解决方案的好,因为我不经常使用表达式。
c_exp = function(x1, x2) {
parse(text = c("{",
tail(head(deparse(x1), -1), -1),
head(tail(deparse(x2), -1), -1),
"}"))
}
x1 = expression({a+b})
x2 = expression({a + 1})
c_exp(x1, x2)
# expression({
# a + b
# a + 1
# })