If you want to use foreach to do the looping, you can use the "isplit"
function to create an iterator returning blocks of data, each block
being the data for one site:
> require(foreach)
> site.data <- read.table("isplit-data.txt",header=T) # data
copied from email
> sites <- isplit(site.data,site.data$site)
You can see how the iterator works with nextElem. The value is a list
with two elements "value" (the block) and "key" (the site
name, as a
list):
> nextElem(sites)
$value
site year peak
1 ALBEN 5 101529.6
2 ALBEN 10 117483.4
3 ALBEN 20 132960.9
4 ALBEN 50 153251.2
5 ALBEN 100 168647.8
6 ALBEN 200 184153.6
7 ALBEN 500 204866.5
$key
$key[[1]]
[1] "ALBEN"
Now you can use foreach to loop over your data frame, without a
separate split operation:
sites <- isplit(site.data,site.data$site)
foreach(site=sites) %dopar% {
pdf(paste(site$key[[1]],".pdf",sep=""))
plot(site$value$year,site$value$peak,main=site$key[[1]])
dev.off()
}
On the data you showed, this creates three files: ALBEN.pdf, ALDER.pdf
and AMERI.pdf, each with a scatterplot of peak by year.
If your 300 plots take a non-trivial amount of time to produce, and
speed is a concern, you could even parallelize the production on a
multiprocessor system (Mac/Unix only) with registerDoMC().
Hope this helps,
# David Smith
On Fri, Aug 7, 2009 at 12:05 PM, Ingrid Tohver<itohver at
u.washington.edu> wrote:> Hello,
> I am attempting to create several plots based on "site" (~300
total) and am
> having trouble with the code. I simply want to create a plot using the
code,
> plot(year, peak), for the following dataset. I would like for each site to
> be plotted on a separate page and the plots saved in a directory. Would a
> "foreach" loop work? I tried a "by" statement, but it
doesn't seem to work
> with plotting functions.
> I would really appreciate any leads.
> Ingrid
>
> ?site ? ? ? ? ?year ? peak
> ALBEN ? ? ? 5 ?101529.6
> ALBEN ? ? ?10 ?117483.4
> ALBEN ? ? ?20 ?132960.9
> ALBEN ? ? ?50 ?153251.2
> ALBEN ? ? 100 ?168647.8
> ALBEN ? ? 200 ?184153.6
> ALBEN ? ? 500 ?204866.5
> ALDER ? ? ? 5 ? ?6561.3
> ALDER ? ? ?10 ? ?7897.1
> ALDER ? ? ?20 ? ?9208.1
> ALDER ? ? ?50 ? 10949.3
> ALDER ? ? 100 ? 12287.6
> ALDER ? ? 200 ? 13650.2
> ALDER ? ? 500 ? 15493.6
> AMERI ? ? ? 5 ? 43656.5
> AMERI ? ? ?10 ? 51475.3
> AMERI ? ? ?20 ? 58854.4
> AMERI ? ? ?50 ? 68233.3
> AMERI ? ? 100 ? 75135.9
> AMERI ? ? 200 ? 81908.3
>
>
> Ingrid M Tohver
> Research Scientist, Climate Impacts Group
> University of Washington
--
David M Smith <david at revolution-computing.com>
Director of Community, REvolution Computing www.revolution-computing.com
Tel: +1 (206) 577-4778 x3203 (San Francisco, USA)
Check out our upcoming events schedule at www.revolution-computing.com/events