views:

177

answers:

2

I'm using R to loop through a data frame, perform a calculation and to make a plot.

for(i in 2 : 15){
# get data
dataframe[,i]  

# do analysis

# make plot
a <- plot()
}

Is there a way that I can make the plot object name 'a', using the value of 'i'? For example, a + "i" <- plot(). Then I want to add that to a vector so I have a series of plots that I can then use at a later stage when I want to make a pdf. Or perhaps there is another way of storing this.

I'm familiar with the paste() function but I haven't figured out how to define an object using it.

+3  A: 

Have a look at the packages lattice or ggplot2, the plot functions in these packages create objects which can be assigned to variables and can be printed or plotted at a later stage.

For instance with lattice:

library("lattice")
i <- 1
assign(sprintf("a%d", i), xyplot(1:10 ~ 1:10))
print(a1) # you have to "print" or "plot" the objects explicitly

Or append the objects to a list:

p <- list()
p[[1]] <- xyplot(...)
p[[2]] <- xyplot(...)
rcs
+1  A: 

If you want a "vector" of plot objects, the easiest way is probably to store them in a list. Use paste() to create a name for your plot and then add it to the list:

# Create a list to hold the plot objects.
pltList <- list()

for( i in 2:15 ){

  # Get data, perform analysis, ect.

  # Create plot name.
  pltName <- paste( 'a', i, sep = '' )

  # Store a plot in the list using the name as an index.
  pltList[[ pltName ]] <- plot()

}

If you didn't want to store the plots in a list and literally wanted to create a new object that had the name contained in pltName, then you could use assign():

# Use assign to create a new object in the Global Environment
# that gets it's name from the value of pltName and it's contents
# from the results of plot()
assign( pltName, plot(), envir = .GlobalEnv )
Sharpie
Thank you both for your answers - they are very helpful.
womble