Je cherche un moyen de créer une expression qui est le produit de deux expressions données. Par exemple, supposons que j'ai maintenant, je veux créer de manière programmative l'expression (E1) * (E2) code>: p>
dérivé code> veut des expressions comme une entrée. P> p>
3 Réponses :
Essayez ceci:
e1 <- quote(a+b*x) # or expression(*)[[1]] e2 <- quote(c+d*x) substitute(e1 * e2, list(e1=e1, e2=e2))
Merci! J'ai accepté la réponse de Dason, qui est essentiellement la même idée, car il a répondu à la question exacte posée, mais cette réponse a fourni une idée supplémentaire.
Je ne traite pas de cela trop souvent, mais quelque chose comme ça semble fonctionner
Merci, c'est ce dont j'avais besoin. Les parenthèses de (E1) * (E2) code> ne sont même pas nécessaires - R est suffisamment intelligente pour les mettre dans.
Il est probablement surkill dans votre cas, mais le aussi, au lieu d'utiliser note explicative: strong> un aspect initialement déroutant de traiter avec Travailler à partir de l'intérieur, le code ci-dessus: p> ryacas < / code>
paquet peut être agréable pour effectuer des manipulations symboliques plus compliquées de ce type: substitut () code>, vous pouvez Construisez la même expression dans la base R comme ceci: p>
expression code> Les objets sont qu'ils sont vraiment
E1 code> et
E2 code> sont des listes de longueur 1 contenant un seul
appel code> objet chacun. P>
appel code> à l'aide de
[[1]] code> li>
as.call () code> pour construire un nouvel appel qui est le produit des deux
appel code> objet. li>
résultant code> sauvegardez comme l'expression
code> objet que vous souhaitez. li>
ol> p>
Oui, j'ai essayé de jouer avec l'expression comme une liste, mais je ne pouvais pas le faire fonctionner. Pas étonnant, c'est délicat.
Sans aucun doute. Cela commence à faire beaucoup de sens pour moi après environ 5 ans de travailler avec la langue très régulière. Bonne chance à construire votre fonction.
À titre de note latérale: si vous êtes dans une situation similaire mais ne nécessite pas d'expression code> pour une sortie, créez des fonctions et utilisez plutôt le corps code> pour modifier le contenu de la fonction.