How would one go about putting titles in each of several plots
that are generated from within a call to tapply? For example I'd
like the following two barplots to have titles 'Group 1' and
'Group 2', where '1' and '2' come from the levels of
'group'.
group <- gl(2, 10)
result <- sample(c('A', 'B'), size=length(group),
replace=TRUE)
windows(7, 4)
par(mfrow = c(1, 2))
tapply(result, group,
function(x) barplot(table(x), xlab = 'Result'))
I found something close to what I'm looking for here
http://tolstoy.newcastle.edu.au/R/help/04/09/3219.html. So I
tried
mapply(function(x) barplot(table(x), xlab = 'Result'),
split(result, group), main = levels(group))
Error in function (x) : unused argument(s) (main ...)
(I expected to get titles of '1' and '2'. Not exactly what I
asked for in the question, but it would have been progress.)
Much obliged,
Dennis
On Wed, 1 Feb 2006, Dennis Malandro wrote:> How would one go about putting titles in each of several plots > that are generated from within a call to tapply? For example I'd > like the following two barplots to have titles 'Group 1' and > 'Group 2', where '1' and '2' come from the levels of 'group'. > > group <- gl(2, 10) > result <- sample(c('A', 'B'), size=length(group), replace=TRUE) > windows(7, 4) > par(mfrow = c(1, 2)) > tapply(result, group, > function(x) barplot(table(x), xlab = 'Result'))You don't need tapply here (it is just lapply on split). Try X <- split(result, group) for(i in levels(group)) barplot(table(X[[i]]), xlab = 'Result', main = paste("Group", i)) You could use lapply() rather than for(), but there would be no benefit. -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
You were close with mapply. You can pass the labels as a second argument to
your function
To take advantage of the vectorized nature of mapply:
mapply(function(x,y) barplot(table(x), xlab = 'Result',
main=paste("Group",y,sep="-")),
split(result, group), levels(group))
-Christos
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Dennis Malandro
Sent: Thursday, February 02, 2006 1:35 AM
To: R-help at stat.math.ethz.ch
Subject: [R] Titles in plots generated within tapply
How would one go about putting titles in each of several plots that are
generated from within a call to tapply? For example I'd like the following
two barplots to have titles 'Group 1' and 'Group 2', where
'1' and '2' come
from the levels of 'group'.
group <- gl(2, 10)
result <- sample(c('A', 'B'), size=length(group),
replace=TRUE) windows(7,
4) par(mfrow = c(1, 2)) tapply(result, group,
function(x) barplot(table(x), xlab = 'Result'))
I found something close to what I'm looking for here
http://tolstoy.newcastle.edu.au/R/help/04/09/3219.html. So I tried
mapply(function(x) barplot(table(x), xlab = 'Result'),
split(result, group), main = levels(group))
Error in function (x) : unused argument(s) (main ...)
(I expected to get titles of '1' and '2'. Not exactly what I
asked for in
the question, but it would have been progress.)
Much obliged,
Dennis
______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html