Realmente me encantaría si pudiéramos subíndice una lista con una matriz y hacer que esta dé forma a la lista en una lista de listas.
l = {"A", "B", "C", "D", "E", "F"};
ss = [1 2, 3 4, 5 6];
l[ss]; // I want this to come out as {{"A", "B"}, {"C", "D"}, {"E", "F"}};
@vince_faller ,
Tengo un deseo un poco más genérico. Pero decidió apilar. Es un deseo repetido de una función que evalúe cada elemento de una lista, al igual que una función se aplica a cada elemento de una matriz.
Si está disponible, entonces
l [AsList (ss)] devolvería el resultado deseado.
Utilizo LFunc () a menudo. Ojalá fuera una capacidad incorporada. Se adjunta un script con mi versión de una función. Quite / * en la línea 81 para
l = {"A", "B", "C", "D", "E", "F"};
ss = [1 2, 1 4, 5 2];
ssl = As List(ss);
rst = Lfunc(ssl,Expr(l[x]));
show(l, ssl,rst);
Salida de registro
/*:
ssl = {{1, 2}, {1, 4}, {5, 2}};
rst = {{"A", "B"}, {"A", "D"}, {"E", "B"}};
En caso de que alguien del blog pueda estar interesado.
Lfunc = Function( {xList, fExpr/*ex. Expr(Contains(x,"h"))*/},
{x = {}, i = 1, errCode = 0, errStr = "\!NError bad argument", newExpr},
If( !Is List( xList ),
errCode = 1
);
If(
Type( Name Expr( fExpr ) ) == "Name",
//if Name then JMP does not recognize the function
tmp = Trim( Char( Name Expr( fExpr ) ) );
//extract the function and check if it is contained in the global namespace, if not error!
If( Namespace( "global" ) << Contains( Word( 1, tmp, ":(" ) ) == 0,
errCode = errCode + 2
);,
Type( Name Expr( fExpr ) ) != "Expression", errCode = errCode + 2
);
//catches typos, returns Name if not a valid function
//catches typos, returns Name if not a valid function
If( !Is Expr( Name Expr( fExpr ) ),
errCode = errCode + 2
); //catches syntax
If(
!errCode,
For( i = 1, i <= N Items( xList ), i++,
newExpr = Substitute( Name Expr( fExpr ), Expr( x ), xList[i] );
insert Into(x, "");
x[i] = Eval(Expr(Try( newExpr, Empty() )));
),
errCode == 1, Write( errStr || "(1) not a list \!N" ),
errCode == 2, Write( errStr || "(2) not a valid expression \!N" ),
errCode == 3, Write( errStr || "s (1) is not a list and (2) is not a valid expression \!N" )
);
x//return x
;
); //End Lfunc
l = {"A", "B", "C", "D", "E", "F"};
ss = [1 2, 1 4, 5 2];
ssl = As List(ss);
rst = Lfunc(ssl,Expr(l[x]));
show(l, ssl,rst);
Lfunc = Function( {xList, fExpr/*ex. Expr(Contains(x,"h"))*/},
{x = {}, i = 1, errCode = 0, errStr = "\!NError bad argument", newExpr},
If( !Is List( xList ),
errCode = 1
);
If(
Type( Name Expr( fExpr ) ) == "Name",
//if Name then JMP does not recognize the function
tmp = Trim( Char( Name Expr( fExpr ) ) );
//extract the function and check if it is contained in the global namespace, if not error!
If( Namespace( "global" ) << Contains( Word( 1, tmp, ":(" ) ) == 0,
errCode = errCode + 2
);,
Type( Name Expr( fExpr ) ) != "Expression", errCode = errCode + 2
);
//catches typos, returns Name if not a valid function
//catches typos, returns Name if not a valid function
If( !Is Expr( Name Expr( fExpr ) ),
errCode = errCode + 2
); //catches syntax
If(
!errCode,
For( i = 1, i <= N Items( xList ), i++,
newExpr = Substitute( Name Expr( fExpr ), Expr( x ), xList[i] );
insert Into(x, "");
x[i] = Eval(Expr(Try( newExpr, Empty() )));
),
errCode == 1, Write( errStr || "(1) not a list \!N" ),
errCode == 2, Write( errStr || "(2) not a valid expression \!N" ),
errCode == 3, Write( errStr || "s (1) is not a list and (2) is not a valid expression \!N" )
);
x//return x
;
); //End Lfunc
/*
//Usage & Test ...remove the slash asterisk and run in segments, results are in the log
//------------------------------------------------------------------------------
myList={"john", "harry", "huh","ah ha", "xyx", , "a", "h", 7, [1,7]};
/* returns a list of numeric values, one value for each item in the list
// n =>1st location of h, 0 => does not contain, Empty() => the item is not
// a valid argument for that expression.
// */
zz = Lfunc(myList,Expr(Contains(x,"h")));
myList={"john", "harry", "huh","ah ha", "xyx", , "a", "h"};
zz=Lfunc(myList, Expr(Uppercase(x)));
show(zz);
-----------------------------------------------------------------------------------------
/* returns a list of how many words are in each string
[] -> no occurrences
Empty() => the expression is not valid for that item.
*/
zz = Lfunc(mylist, expr(nitems(words(x))));
show(zz);
-----------------------------------------------------------------------------------------
/* This specified function requires numeric arguments
Empty() => the expression is not valid for that item.
A numeric function applied to a matrix returns a matrix
of the results applied on each element in the matrix.
Only the last 2 items are valid arguments for Log()
*/
myList={"john", "harry", "huh","ah ha", "xyx", , "a", "h", 7, [1,7]};
zz = Lfunc(mylist, expr(log(x)));
show(zz);
----------------Error Checking---------------------------------------------------------------
zz = Lfunc("oh johhny", Expr(Contains(x,"h")) ); //not a list
show(zz);
zz = Lfunc({"oh johhny"}, Expr(Contians(x,"h")) ); //type not a valid expr due to typo
show(zz);
zz = Lfunc("oh johhny", Expr(Contians(x,"h")) ); //not a list and not a valid expr
show(zz);
----- end test */