La función de sustitución en R
crea un objeto de lenguaje en forma de un árbol que se puede analizar. ¿Cómo puedo crear el árbol desde cero usando list o else para dárselo a eval?Crear árbol de expresiones en R
# 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....
me gustaría saber cómo puedo reconstruir el objeto e1
mediante programación. Idealmente creo un objeto de listas intrincadas con el objeto correcto en ellas y tal vez llamo a algunos as.language
en el objeto list
. Sin embargo, eso no funciona. Por ejemplo:
# 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
Una forma es simplemente generar la cadena '1 + 1' y luego analizarlo, pero no parece elegante para generar cadenas de analizar de nuevo cuando se tiene el árbol en el primer lugar !
eval(parse(text='1+1')) # does return 1, but not elegant if tree is
# large and already in memory
Gracias por su ayuda!
incluso mejor, así que puedo hacer 'call ('+' , e1, e2) 'para combinar 2 expresiones con un plus, ¡perfecto! – tlamadon