我试图通过连接较小的表达式来构建 R 中的表达式。例如在 S+ 我可以这样做:
> x = substitute({a;b;c})
> y = substitute({d;e;f})
> c(x,y)
{
a
b
c
d
e
f
}
但如果我在 R 中尝试,我会得到这个:
> c(x,y)
[[1]]
{
a
b
c
}
[[2]]
{
d
e
f
}
我应该以另一种方式这样做吗?
最佳答案
@baptiste 的回答所附评论表明 x
和 y
不是 "expression"
类型的对象(R 使用的九种基本向量类型之一)。因此,它们不能通过使用 c()
组合起来。 ,如果他们真的是这样的话,他们可以expression
向量。
如果您确实想组合 "{"
类的对象(在 R 语言定义的 this section 中称为“复合语言对象”)您可以执行以下操作:
x <- substitute({a;b;c})
y <- substitute({d;e;f})
class(x)
# [1] "{"
as.call(c(as.symbol("{"), c(as.list(x)[-1], as.list(y)[-1])))
{
a
b
c
d
e
f
}
然后,如果您要经常这样做,您可以创建一个函数来组合一组任意的类
"{"
的对象。 :myC <- function(...) {
ll <- list(...)
ll <- lapply(ll, function(X) as.list(X)[-1])
ll <- do.call("c", ll)
as.call(c(as.symbol("{"), ll))
}
# Try it out
myC(x, y, y, y, x)
关于r - 如何在 R 中连接复合语言对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9744729/