Re: [R] Using subset() in a user-defined function

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Thu, 14 Jun 2007 09:58:25 -0400

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_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 and provide commented, minimal, self-contained, reproducible code. Received on Thu 14 Jun 2007 - 14:05:24 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 14 Jun 2007 - 15:31:57 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.