Hola,
Estoy aprendiendo a trabajar con manipulaciones de expresión y me está costando entenderlo.
En la primera sección del código a continuación, puedo insertar con éxito el nombre de la columna de cadena en la expresión column(), pero no puedo insertar las expresiones generadas en una lista.
La segunda sección separa los términos de interacción (esta es una lista de efectos de SLS), los inserta en su propia expresión column(), los vuelve a unir como un término de interacción y luego los inserta en una lista.Esta sección no funciona.
¿Alguien tiene algún consejo útil o ve algo que no entiendo sobre cómo funcionan las manipulaciones de expresión?¡Gracias por adelantado!
names default to here(1);
// Basic need below - but only works for single column names
collist = { "Col 1", "Col 2", "Col 3", "Col 4", "Col 5" };
newlist = {};
for( i = 1, i <= N items(collist), i++,
// Empty arg to identify cols by names
name_arg = Expr( column() );
insert into( name_arg, eval insert( collist[i] ) ); // result: column("Col 1"), or other cols inserted <-- Working as intended
show( name_arg ); // Shows successful insert into's
insert into( newlist, insert into( name_arg, eval insert( collist[i] ) ) );
// Nested insert into doesn't work
// Need to insert the result of the first insert into, into newlist
);
show( newlist ); // Currently shows empty list
///////////////////////////////////////// DOES NOT WORK, BELOW
// Advanced flow - interaction detection
collist2 = { "Col 1", "Col 2", "Col 3", "Col 4", "Col 5", "Col 1*Col 2", "Col 2*Col 4", "Col 5*Col 5" };
newlist2 = {};
for( a = 1, a <= N items( collist2 ), a++,
// Empty arg to identify cols by names
name_arg = Expr( column() );
// For whatever the match below, the result must be added to newlist2
// Regex works, as per regex101.com
if( !contains( collist2[a], "*" ), insert into( name_arg2, eval insert( collist2[a] ) ), // single term insert, refer to basic needs flow above
insert into( name_arg2, eval insert( regex( collist2[a], "^(.*)\*(.*)$", "\1" ) ) ); // Breaks apart 1st group to insert into column()
insert into( name_arg2, eval insert( regex( collist2[a], "^(.*)\*(.*)$", "\2" ) ) ); // Breaks apart 2nd group to insert into column()
// The line below is a mockup of joining back together the first and second group together as interaction terms - doesn't work
//eval expr( expr( insert into( name_arg2, eval insert( regex( mylist2[a], "^(.*)\*(.*)$", "\1" ) ) )*insert into( name_arg2, eval insert( regex( mylist2[a], "^(.*)\*(.*)$", "\2" ) ) );
)
);
Desired_output = { column("Col 1"), column("Col 2"), column("Col 3"), column("Col 4"), column("Col 5"), column("Col 1")*column("Col 2"),
column("Col 2")*column("Col 4"), column("Col 5")*column("Col 5") };