Создание дерева выражений в R

Функция замены в R создает языковой объект в форме дерева, которое можно анализировать. Как я могу создать дерево с нуля, используя список, или передать его eval?

# substitute gives a tree representation of the expression
a=1; b=2;
e1 = substitute(a+2*b)
eval(e1)      #gives 5 as expected
e1            # is type language
e1[[1]]       # this is `+`
e1[[2]]       # this is 'a' type symbol
e1[[3]]       # this is type language
e1[[3]][[1]]  # this is `*`  etc....

Я хотел бы знать, как я могу программно реконструировать объект e1 . В идеале я создаю объект из замысловатых списков с правильным объектом в них и, возможно, я вызываю какой-нибудь как язык в объекте list . Однако это не работает. Например:

# how to construct the tree?
eval(list(as.symbol('+'),1,1))                # does not return 2
eval(as.expression(list(as.symbol('+'),1,1))) # does not return 2

Один из способов - просто сгенерировать строку '1 + 1', а затем проанализировать ее, но не кажется элегантным создавать строки для их повторного анализа, когда изначально у вас есть дерево!

eval(parse(text='1+1')) # does return 1, but not elegant if tree is 
                        # large and already in memory 

Спасибо за вашу помощь!

12
задан tlamadon 22 December 2011 в 22:12
поделиться