Re: Controlling program flow across cells
- To: mathgroup at smc.vnet.net
- Subject: [mg54391] Re: Controlling program flow across cells
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Sun, 20 Feb 2005 00:07:50 -0500 (EST)
- References: <cv6s3v$6l2$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
semiclassical wrote:
> Here is the problem:
>
> I import a large data file - 20 years of hourly observations, which is
> used to populate a raw data list of approximately 176,000 rows with
> the following structure:
>
> {year, day, hour, validity_Flag, data_Item1, ... ,data_Item5}
>
> The list is then parsed, filtered and operated upon in several
> different ways. In particular I calculate statistical properties of a
> specified 5 year period. The process is encapsulated in a number of
> cells-
>
> Cell_1 : Parse[ Import and filter raw data ];
>
> Cell_2a: Parse[ Chip out and sort period of interest ];
> Cell_2b: Calculate[ statistical properties of validity_Flag ];
> Cell_2c: Calculate[ statistical properties of data_Item ];
> Cell_2d: Calculate[ distribution of data_Item ];
>
> This is done for most data_Items, additionally calculations are made
> for hourly statistics and quartely statistics. Now what I would like
> to be able to do is loop over the four 5 year periods within the
> complete 20 year span. Here are two questions:
>
> 1. I would like to set up a For[] loop across Cell_2a-Cell_2d to loop
> through the four periods of interest. How can I do this, or should I
> actually have built the program in a different way?
>
> 2. How can I get output from within a For[] loop as it is executing?
> For example, I might like to watch some value of a given variable
> within the loop as it is calculated (in C I would use a printf).
>
> Thanks,
>
> Aaron
> semiclassical at hotmail.com
>
Your question is a little vague, so I am going to guess what I think you
mean.
I take it each of these four cells contains a calculation. The first
step is to change each of these into a function definition:
step1[]:= (........)
step2[x_]= (........)
etc.
I will assume that you have set things up so that the output of each
calculation is the input to the next, so one turn of your loop would
become step4[step3[step2[step1[]]]]
Note that step1 does not need an argument since it reads its data from a
file. Maybe each of your steps leaves its output in variables, in which
case all the functions would be defined with no arguments, and you would
use step1[];step2[];step3[];step4[]
Here is the loop to repeat the operations.
For[i = 1, i < 176000, step4[step3[step2[step1[]]]]; i++]
The equivalent of C's printf is Print - you can use any number of
arguments including strings, and you dont need to bother with a format.
In general, I would say, think in terms of function definitions - as you
would in C - not in terms of cells.
BTW, I think you would find that a short Mathematica course would help
you enormously.
David Bailey
dbaileyconsultancy.co.uk