cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • DownloadSemiconductor Toolkit: Tools to create wafer maps, add wafer geometry to graphics, explore die defects & compare wafers.
  • Discovery Summit 2026: Early User Edition - September 23-24.Register. It's free.
  • See how to design an experiment, explore factor-response relationships, assess tradeoffs, and ID best settings. Register for Sep. 11 Mastering JMP.

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