Как я могу объединить объекты составного языка в R? - PullRequest
6 голосов
/ 17 марта 2012

Я пытаюсь создать выражения в 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
}

Должен ли я сделать это по-другому?

Ответы [ 3 ]

7 голосов
/ 17 марта 2012

Комментарии, приложенные к ответу @ baptiste, указывают на то, что x и y не являются объектами типа "expression" (один из девяти основных векторных типов, используемых R). Таким образом, они не могут быть объединены с использованием c(), как они могли бы, если бы они были на самом деле expression векторов.

Если вы действительно хотите объединить объекты класса "{" (которые называются «объектами составного языка» в этом разделе определения языка R), вы можете сделать что-то вроде этого:

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)
2 голосов
/ 17 марта 2012

Игнорируя пример, который вы дали в своем вопросе на данный момент,

x = expression(a,b,c)
y = expression(d,e,f)
c(x,y)

Теперь, какие объекты вы пытаетесь объединить?

0 голосов
/ 17 марта 2012

Я думаю, что один из способов - захватить элементы x и y.Всегда будет так, что x[1] - это "{}", поэтому вы можете сделать:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...