Problems solved - Using Map or Thread over selected parts of nested lists
- To: mathgroup at smc.vnet.net
- Subject: [mg95949] Problems solved - Using Map or Thread over selected parts of nested lists
- From: "Paul Ellsmore" <paul.ellsmore at nanion.co.uk>
- Date: Fri, 30 Jan 2009 05:46:33 -0500 (EST)
Thanks to everyone who responded - I now have several good solutions to my two problems, and understand Mathematica a bit better to boot! Cheers, Paul. _____ From: Paul Ellsmore [mailto:paul.ellsmore at nanion.co.uk] Sent: 27 January 2009 16:20 To: 'mathgroup at smc.vnet.net' Subject: [mg95949] Using Map or Thread over selected parts of nested lists Hi, I am currently working with a trial version of Mathematica 7, particularly with an interest in building a graphical user interface. I don't have a great familiarity with Mathematica, but I am trying hard to get to grips with a Mathenatica-style of thinking, and the way lists can be manipulated in particular. I have two questions, answers to which would help me a lot: 1) My GUI allows the user to select some data files to work with. I use the code: source = SystemDialogInput[FileOpen] This returns the full path for each file selected by the user - very convenient and user-friendly. My problem is that "source" is returned as a string (ie an atom) if one file is selected, but a nested list if multiple files are selected. I have similar instances in many parts of my program where the user might be working with one list of data or multiple lists, and I think the same issue will arise. So I would like to know if there is a way of forcing (in this case) "source" to be returned as a nestedlist type, even if the length of that list is one? 2) I have data in the format: List1={{header,header},{header,header},{header,header},{frequency1, complexnumber1},{frequency2, complexnumber2},{frequency3, complexnumber4}.} On very many occasions I want to deal with : List2={{frequency1, realpart1},{frequency2, realpart2},{frequency3, realpart4}.} Or some other trivial transform of complexnumbern. I have been through the VirtualBook, and Documentation centre, and tried various forms of Map and Thread, but I cannot find a way of "mapping" or "threading" a function like Re[expr] over one element of part of a list, as in: List2={{frequency1, Re[complexnumber1]},{frequency2, Re[complexnumber2]},{frequency3, Re[complexnumber4]}.} If someone could give me a pointer to the correct syntax, I would be very grateful. At present, I am getting the results I want by using Ifs and Do loops, to deconstruct and reconstruct my lists, but I feel that is the wrong way to approach things - I want to use Mathematica's strengths, not force it to use a C type approach, just because that's what I am comfortable with. Any suggestions gratefully received, Cheers in advance, Paul. Dr. Paul A. Ellsmore Nanion Limited Oxford Centre for Innovation Mill Street Oxford United Kingdom OX2 0JX Tel: +44 (0) 1865 811175 Fax: +44 (0) 1865 248594 ------=_NextPart_000_0022_01C98210.8F32F9A0 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-Sun-Content-Length: 17450 <html xmlns:v="urn:schemas-microsoft-com:vml" = xmlns:o="urn:schemas-microsoft-com:office:office" = xmlns:w="urn:schemas-microsoft-com:office:word" = xmlns:x="urn:schemas-microsoft-com:office:excel" = xmlns:p="urn:schemas-microsoft-com:office:powerpoint" = xmlns:a="urn:schemas-microsoft-com:office:access" = xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" = xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" = xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" = xmlns:b="urn:schemas-microsoft-com:office:publisher" = xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" = xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" = xmlns:odc="urn:schemas-microsoft-com:office:odc" = xmlns:oa="urn:schemas-microsoft-com:office:activation" = xmlns:html="http://www.w3.org/TR/REC-html40" = xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" = xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" = xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" = xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" = xmlns:ds="http://www.w3.org/2000/09/xmldsig#" = xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" = xmlns:udc="http://schemas.microsoft.com/data/udc" = xmlns:xsd="http://www.w3.org/2001/XMLSchema" = xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/"= xmlns:ec="http://www.w3.org/2001/04/xmlenc#" = xmlns:sp="http://schemas.microsoft.com/sharepoint/" = xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" = xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" = xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" = xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" = xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" = xmlns:st="" = xmlns:st1="urn:schemas-microsoft-com:office:smarttags" = xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; = charset=us-ascii"> <meta name=Generator content="Microsoft Word 11 (filtered medium)"> <!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" = name="country-region"/> <o:SmartTagType = namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="Street"/> <o:SmartTagType = namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"/> <o:SmartTagType = namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="address"/> <o:SmartTagType = namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"/> <o:SmartTagType = namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="City"/> <!--[if !mso]> <style> st1\:*{behavior:url(#default#ieooui) } </style> <![endif]--> <style> <!-- /* Font Definitions */ @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline;} span.EmailStyle17 {mso-style-type:personal; font-family:Arial; color:windowtext;} span.EmailStyle18 {mso-style-type:personal-reply; font-family:Arial; color:navy;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1288390089; mso-list-type:hybrid; mso-list-template-ids:510956088 67698705 67698713 67698715 67698703 = 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-text:"%1\)"; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level2 {mso-level-tab-stop:72.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level3 {mso-level-tab-stop:108.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level4 {mso-level-tab-stop:144.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level5 {mso-level-tab-stop:180.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level6 {mso-level-tab-stop:216.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level7 {mso-level-tab-stop:252.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level8 {mso-level-tab-stop:288.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level9 {mso-level-tab-stop:324.0pt; mso-level-number-position:left; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --> </style> <!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1026" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1" /> </o:shapelayout></xml><![endif]--> </head> <body lang=EN-US link=blue vlink=purple> <div class=Section1> <p class=MsoNormal><font size=2 color=navy face=Arial><span = style='font-size: 10.0pt;font-family:Arial;color:navy'>Thanks to everyone who responded = – I now have several good solutions to my two problems, and understand = Mathematica a bit better to boot!<o:p></o:p></span></font></p> <p class=MsoNormal><font size=2 color=navy face=Arial><span = style='font-size: 10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=2 color=navy face=Arial><span = style='font-size: 10.0pt;font-family:Arial;color:navy'>Cheers,<o:p></o:p></span></font></p>= <p class=MsoNormal><font size=2 color=navy face=Arial><span = style='font-size: 10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=2 color=navy face=Arial><span = style='font-size: 10.0pt;font-family:Arial;color:navy'>Paul.<o:p></o:p></span></font></p> <p class=MsoNormal><font size=2 color=navy face=Arial><span = style='font-size: 10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p> <div> <div class=MsoNormal align=center style='text-align:center'><font = size=3 face="Times New Roman"><span style='font-size:12.0pt'> <hr size=2 width="100%" align=center tabindex=-1> </span></font></div> <p class=MsoNormal><b><font size=2 face=Tahoma><span = style='font-size:10.0pt; font-family:Tahoma;font-weight:bold'>From:</span></font></b><font = size=2 face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> Paul = Ellsmore [mailto:paul.ellsmore at nanion.co.uk] <br> <b><span style='font-weight:bold'>Sent:</span></b> 27 January 2009 = 16:20<br> <b><span style='font-weight:bold'>To:</span></b> '<st1:PersonName = w:st="on">mathgroup at smc.vnet.net</st1:PersonName>'<br> <b><span style='font-weight:bold'>Subject:</span></b> Using Map or = Thread over selected parts of nested lists</span></font><o:p></o:p></p> </div> <p class=MsoNormal><font size=3 face="Times New Roman"><span = style='font-size: 12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>Hi,<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>I am currently working with a trial version = of Mathematica 7, particularly with an interest in building a graphical = user interface. I don’t have a great familiarity with Mathematica, but = I am trying hard to get to grips with a Mathenatica-style of thinking, and = the way lists can be manipulated in particular. I have two questions, answers to = which would help me a lot:<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal = style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 = lfo2'><![if !supportLists]><font size=3 face="Times New Roman"><span lang=EN-GB = style='font-size:12.0pt'><span style='mso-list:Ignore'>1)<font size=1 face="Times New = Roman"><span style='font:7.0pt "Times New Roman"'> = </span></font></span></span></font><![endif]><span lang=EN-GB>My GUI allows the user to select some data files to work = with. I use the code:<o:p></o:p></span></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>source = = SystemDialogInput[FileOpen]<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>This returns the full path for each file = selected by the user – very convenient and user-friendly. My problem is that “source” is returned as a string (ie an atom) if one file is selected, but a nested list if multiple files are selected. I have = similar instances in many parts of my program where the user might be working = with one list of data or multiple lists, and I think the same issue will arise. = So I would like to know if there is a way of forcing (in this case) “source” to be returned as a nestedlist type, even if the = length of that list is one?<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal = style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 = lfo2'><![if !supportLists]><font size=3 face="Times New Roman"><span lang=EN-GB = style='font-size:12.0pt'><span style='mso-list:Ignore'>2)<font size=1 face="Times New = Roman"><span style='font:7.0pt "Times New Roman"'> = </span></font></span></span></font><![endif]><span lang=EN-GB>I have data in the format:<o:p></o:p></span></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>List1={{header,header},{header,header},{head= er,header},{frequency1, complexnumber1},{frequency2, complexnumber2},{frequency3, complexnumber4}…}<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>On very many occasions I want to deal with = :<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>List2={{frequency1, realpart1},{frequency2, = realpart2},{frequency3, realpart4}…}<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>Or some other trivial transform of = complexnumbern. I have been through the VirtualBook, and Documentation centre, and tried = various forms of Map and Thread, but I cannot find a way of = “mapping” or “threading” a function like Re[expr] over one element of = part of a list, as in:<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>List2={{frequency1, = Re[complexnumber1]},{frequency2, Re[complexnumber2]},{frequency3, = Re[complexnumber4]}…}<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>If someone could give me a pointer to the = correct syntax, I would be very grateful.<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>At present, I am getting the results I want = by using Ifs and Do loops, to deconstruct and reconstruct my lists, but I feel = that is the wrong way to approach things – I want to use = Mathematica’s strengths, not force it to use a C type approach, just because = that’s what I am comfortable with.<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>Any suggestions gratefully = received,<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>Cheers in = advance,<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'>Paul.<o:p></o:p></span></font></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = lang=EN-GB style='font-size:12.0pt'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=2 face=Arial><span = style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=2 face=Arial><span = style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p> <p class=MsoNormal><font size=2 face=Arial><span = style='font-size:10.0pt; font-family:Arial'>Dr. Paul A. Ellsmore</span></font><o:p></o:p></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = style='font-size: 12.0pt'> <o:p></o:p></span></font></p> <p class=MsoNormal><font size=2 face=Arial><span = style='font-size:10.0pt; font-family:Arial'>Nanion Limited</span></font><o:p></o:p></p> <p class=MsoNormal><st1:place w:st="on"><st1:City w:st="on"><font = size=2 face=Arial><span = style='font-size:10.0pt;font-family:Arial'>Oxford</span></font></st1:Ci= ty></st1:place><font size=2 face=Arial><span = style='font-size:10.0pt;font-family:Arial'> Centre for Innovation</span></font><o:p></o:p></p> <p class=MsoNormal><st1:Street w:st="on"><st1:address = w:st="on"><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>Mill = Street</span></font></st1:address></st1:Street><o:p></o:p></p> <p class=MsoNormal><st1:place w:st="on"><st1:City w:st="on"><font = size=2 face=Arial><span = style='font-size:10.0pt;font-family:Arial'>Oxford</span></font></st1:Ci= ty></st1:place><o:p></o:p></p> <p class=MsoNormal><st1:place w:st="on"><st1:country-region = w:st="on"><font size=2 face=Arial><span = style='font-size:10.0pt;font-family:Arial'>United Kingdom</span></font></st1:country-region></st1:place><o:p></o:p></p> <p class=MsoNormal><font size=2 face=Arial><span = style='font-size:10.0pt; font-family:Arial'>OX2 0JX</span></font><o:p></o:p></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = style='font-size: 12.0pt'> <o:p></o:p></span></font></p> <p class=MsoNormal><font size=2 face=Arial><span = style='font-size:10.0pt; font-family:Arial'>Tel: +44 (0) 1865 811175</span></font><o:p></o:p></p> <p class=MsoNormal><font size=2 face=Arial><span = style='font-size:10.0pt; font-family:Arial'>Fax: +44 (0) 1865 248594</span></font><o:p></o:p></p> <p class=MsoNormal><font size=3 face="Times New Roman"><span = style='font-size: 12.0pt'><o:p> </o:p></span></font></p> </div> </body> </html> ------=_NextPart_000_0022_01C98210.8F32F9A0--