Re: Use of Import inside of Module
- To: mathgroup at smc.vnet.net
- Subject: [mg33321] Re: [mg33299] Use of Import inside of Module
- From: WhoamI <lushstring at yahoo.com>
- Date: Thu, 14 Mar 2002 19:51:23 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
--- "Philip M. Howe" <pmhowe at lanl.gov> wrote: > > Hi All, > > I have some fairly large data files that I am > working with in > Mathematica. Each data file contains five columns of > data, the first > two of which are of interest to me, so I perform a > few manipulations > to convert the first two columns into a list of > pairwise data, which > I then plot. I have generated a toy file > ("myfile"), to illustrate > the point - myfile is a text file containing the > following: > > 0 0 1 2 3 > 1 0 2 3 5 > 2 0 2 2 4 > 3 0 3 3 4 > 4 1 4 4 5 > 5 .9 4 5 6 > 6 .8 4 5 6 > 7 .6 4 5 6 > 8 .5 4 6 6 > 9 .4 5 5 6 > 10 .4 5 5 6 > > This small file could easily be pasted, but the > large files are > unwieldy, so it is nice to use "Import". Using > "Import", the > following does what I want: > > ndat = Import["myfile", "Table"]; > mdat = Transpose[{Transpose[ndat][[1]], > Transpose[ndat][[2]]}]; > ListPlot[mdat, PlotJoined -> True]; > > Since I have numerous files to work with, I wish to > combine the above > into a single function, which contains all the > steps. It looks like > the snippet below ought to work, but it doesn't: > > Clear[g, ndat, mdat, file]; > g[file_] := Module[{ndat, mdat}, > ndat = Import["file", "Table"]; > mdat = Transpose[{Transpose[ndat][[1]], > Transpose[ndat][[2]]}]; > ListPlot[mdat, PlotJoined -> True]] > g[myfile]; > > Apparently, the problem lies with embedding Import > within Module. I > can generate a work-around: > > ndat = Import["myfile", "Table"]; > g[file_] := Module[{mdat}, > mdat = Transpose[{Transpose[file][[1]], > Transpose[file][[2]]}]; > ListPlot[mdat, PlotJoined -> True]]; > g[ndat]; > > However, using Module might be neater, and I would > like to know what > I am doing wrong, anyway. Any suggestions? > > Thanks for the help. Hi Philip, the problem in your code is the argument you are passing to the "g" function...Try this Clear[g, ndat, mdat, file]; g[file_] := Module[{ndat, mdat}, ndat = Import[ ToString[file], "Table"]; mdat = Transpose[{Transpose[ndat][[1]], Transpose[ndat][[2]]}]; ListPlot[mdat, PlotJoined -> True]] g[myfile] or better: Clear[g, ndat, mdat, file]; g[file_String] := Module[{ndat, mdat}, ndat = Import[file, "Table"]; mdat = Transpose[{Transpose[ndat][[1]], Transpose[ndat][[2]]}]; ListPlot[mdat, PlotJoined -> True]] g["myfile"] The last is better because the name of the file can contain an extension for example "myfile.dat". The first approach can't do it: In[1]:= Characters[ToString[myfile.dat]] Out[1]= {m, y, f, i, l, e, , ., , d, a, t} because of the blancks which appear because of the dot product. Greetings... Cesar Guerra Secc. Fisica - PUCP Lima - Peru __________________________________________________ Do You Yahoo!? Yahoo! Sports - live college hoops coverage http://sports.yahoo.com/