On 6/14/2007 9:38 AM, Tobin, Jared wrote: > Hello, > > I'm having a problem with using subset() inside a function I'm writing. > Ignoring everything else in the function, the problem can be illustrated > by (where master.frame is the data frame I'm using): > > > function1 <- function(arg1="", arg2="", arg3=""){ > > temp.frame <- subset(master.frame, a == arg1 & b == arg2 & c == > arg3) > > } > > > This works fine if the user specifies all arguments, but if any one or > more of the arguments isn't specified, say arg1 for example, the subset > is empty because subset() goes looking for values of a == "" in > master.frame, and there are none. I want it to work such that if an > argument is not specified, it is not included in what subset() goes > looking for. So if I were to input: > > function1(arg2=5, arg3=6) > > then in function1, the subset command will look like > > temp.frame <- subset(master.frame, b == 5 & c == 6) > > > Any suggestions would be much appreciated.
Code it like this: subset(master.frame, (missing(arg1) | a == arg1) & (missing(arg2) | b == arg2) & (missing(arg3) | c == arg3)) I haven't tried this, and I forget what happens in subset() if you pass it a subset of the wrong length, so it might fail if all args are missing, but otherwise I think it should work. It does depend on defaults for the args existing and not causing errors in the equality tests (it's not using shortcut evaluation). Duncan Murdoch ______________________________________________ R-help@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 and provide commented, minimal, self-contained, reproducible code.