Re: Use of Import inside of Module
- To: mathgroup at smc.vnet.net
- Subject: [mg33308] Re: Use of Import inside of Module
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Thu, 14 Mar 2002 19:51:07 -0500 (EST)
- References: <a6pjo7$apn$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Philip,
Looking at your code
> 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];
The problem is nothing to do with Module, it is that the symbol file in
file_ is not the same as the string "file" in Import["file", "Table"], so
nothing is passed to the right when you evaluate g[myfile], consequently
Import["file", "Table"] is evaluated.
Two ways out ( we cannot use "file"_ )
If you want to use g[myfile] the use Import [ToString[file],"Table"].
If you want to use g["myfile"] then use Import[file,"Table"]
One more thing
mdat = ndat[[All,{1,2}]]
is both neater and quicker than
mdat = Transpose[{Transpose[ndat][[1]], Transpose[ndat][[2]]}];
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Philip M. Howe" <pmhowe at lanl.gov> wrote in message
news:a6pjo7$apn$1 at smc.vnet.net...
>
> 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.
>
> P.
> --
> Philip M. Howe
> Program Manager, Stockpile Surety
> Los Alamos National Laboratory
>
> (505) 665-5332
> (505) 667-9498
> Fax: 505-665-5249
> email pmhowe at lanl.gov
> Mail Stop P945
>