cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Learn how to build custom Python data connectors and further customize JMP’s Data Connector Framework with the Python Data Connector Demo, available now in the JMP Marketplace!
  • See how to create experiments to support product design and ID useful product features. Register for June 12 webinar, 2pm US Eastern Time.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
SpannerHead
Level VI

Nested Lists

I have somehow generated a nested list of columns due to them having been initially grouped.  I would like to remove the nesting to have a continuous list of columns I can act on.

 

Instead of {{:A, :B, :C}, (:D, :E, :F}}, I would like to get to {:A, :B, :C, :D, :E, :F}


Slán



SpannerHead
5 REPLIES 5
mmarchandFSLR
Level VI

Re: Nested Lists

Here's one way, assuming the items inside the outer list are all lists.  If they might not be, you just need to add a little more code to handle it.

 

Names Default to Here( 1 );
this_list = {{:A, :B, :C}, {:D, :E, :F}};
new_list = {};
For Each( {v, i}, this_list,
	For Each( {val, idx}, v,
		Insert Into( new_list, val )
	)
);
SpannerHead
Level VI

Re: Nested Lists

Had to tweak this.  Works now.  Thanks.

 

For Each( {val, idx}, this_list,
		Insert Into( new_list, val )
);	

 


Slán



SpannerHead
mmarchandFSLR
Level VI

Re: Nested Lists

Ah, sorry.  I was testing on strings, and I forgot that inserting a list into a list actually inserts the unevaluated items of the list.  If you have any columns that are not inside of a nested list, they will be inserted as missing, for example:

 

Names Default To Here( 1 );
this_list = {{:A, :B, :C}, :D, {:E, :F, :G}};
new_list = {};
For Each( {v, i}, this_list, Insert Into( new_list, v ) );

//{:A, :B, :C, ., :E, :F, :G}

You can solve the issue by using Name Expr():

 

Names Default To Here( 1 );
this_list = {{:A, :B, :C}, :D, {:E, :F, :G}};
new_list = {};
For Each( {v, i}, this_list, Insert Into( new_list, Name Expr( v ) ) );

//{:A, :B, :C, :D, :E, :F, :G}
txnelson
Super User

Re: Nested Lists

You just need to concatenate the individual lists;

Names Default To Here( 1 );
l1 = {{:A, :B, :C}, {:D, :E, :F}};

l2 = l1[1] || l1[2];

I suggest you take the time to read the section of the Scripting Guide on the creation and manipulation of Lists.

Jim
pmroz
Super User

Re: Nested Lists

Building on Jim's solution.  If you have more than two sublists:

Names Default To Here( 1 );
l1 = {{:A, :B, :C}, {:D, :E, :F}, {:G, :H, :I, :J}};
l3 = {};
for (i = 1, i <= nitems(l1), i++,
	insertinto(l3, l1[i]);
);
print(l3);
{:A, :B, :C, :D, :E, :F, :G, :H, :I, :J}

Recommended Articles