This was _exactly_ what i was looking for, after having spent quite some time reading the language definition and some example code such as subset.data.frame. Thanks!I think David was looking for something like
function(data, x, y)
eval(substitute(plot(x,y)), data)
So now I've got my function that plots two dependent variables in different coulors and/or point types. It even makes legends, although the positioning isn't great. It can probably do with some code cleaning up, but hey, I'm new. There might even be a function that does this already, but I haven't found it yet.
---david
## Plots colums `xcol' vs. `ycol' in colors accortding to levels `ccol', ## and point types according to `pcol'. ## ## optionally first select rows under condition `cond'
plotcol <- function(data, xcol, ycol, ccol=NULL, pcol=NULL, cond=TRUE) {
## extract relevant data
s <- eval(substitute(subset(data, cond, c(xcol,ycol,ccol,pcol))), data)
## help to place the legends
xrange <- range(s[,1], na.rm=TRUE)
yrange <- range(s[,2], na.rm=TRUE)
## colour
if (missing(ccol)) col=1
else {
ccol <- eval(substitute(ccol), s) # replace name with data
col <- as.numeric(ccol) # make colors
}
## point type
if (missing(pcol)) pch=1
else {
pcol <- eval(substitute(pcol), s)
pch=as.numeric(pcol)
}
## make the plot
plot(s[,1:2], col=col, pch=pch)
## and fix the legends
if (length(col)>1) {
size <- legend(xrange[1], yrange[2], legend=levels(ccol),
col=1:nlevels(ccol), pch=1, lty=1)
y <- yrange[2]-size$rect$h # calculate pos of next legend
} else y <- yrange[2]
if (length(pch)>1)
legend(xrange[1], y, legend=levels(pcol), pch=1:nlevels(pcol))
}______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
