[R] How to create separate plots for all combinations of some factors

David Winsemius dwinsemius at comcast.net
Fri Jun 26 17:55:08 CEST 2009


You did not supply any executable examples for testing, but perhaps  
you could benefit by looking at:

?expand.grid
?tapply

Those to split or index your data "for all combinations of factors".

?mapply  # to do the plotting.


On Jun 26, 2009, at 9:54 AM, Lane, Jim wrote:

> Hi, All
>
> I have a data frame as follows:
>
>> data.class(tapes)
> [1] "data.frame"
>> names(tapes)
> [1] "date"    "loc"     "class"    "drp"     "data"    "scratch"
> "reclaim" "total"
>
> Date is a date; loc, class and drp are factors; the rest are numerics.
> I want to generate separate plots by date for the numeric variables  
> for
> all combinations of the factors. I tried to do this as follows:
>
>> by(tapes,list(loc,class,drp),plot(date,scratch))
> Error in FUN(X[[1L]], ...) : could not find function "FUN"

Welcome to functional programming. Generally with R when you pass  
arguments, you need to create a function that receives those  
arguments, unless you happen to know that the proper objects would be  
coming to plot (and then you would not use "(date, scratch)".  Perhaps  
(ObWAG, untested, complete guesswork) :

by(tapes, list(loc,class,drp), function(x) { with(x,  
plot(date,scratch))} )

(I generally try tapply() first rather than using by().)

# What gets passed to the function is not named "date" and "scratch"  
in any case, but is named whatever you use in the function argument  
list. You need to pull that object apart  properly within the function.

>
> As well as the error I get a single plot for all values of scratch and
> date which is meaningless. What am I going wrong here?
>
> For clarification what I want would be done is SAS as something like:
>
An executable example would have been a better way of getting an  
accurate answer.

-- 

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list