On 6/14/2007 10:57 AM, Tobin, Jared wrote: > Thanks for the quick response, Duncan. > > The given code doesn't seem to work, and possibly due to this reason I > found in the online help for missing() (if I understand it correctly): > > "Currently missing() can only be used in the immediate body of the > function that defines the argument, not in the body of a nested function > or a local call. This may change in the future." > > So as I understand it, missing() cannot refer to the arguments of > function1 if it is used in an argument of subset()? It seems to remain > a promising function for this situation regardless, but I'm not sure how > I could implement it into the subset() arguments offhand.
Right, I had forgotten that subset uses nonstandard evaluation. You could evaluate add some variables to hold it, e.g. mysubset <- function(arg1="", arg2="", arg3="") { miss1 <- missing(arg1) miss2 <- missing(arg2) miss3 <- missing(arg3) subset(master.frame, (miss1 | a == arg1) & (miss2 | b == arg2) & (miss3 | c == arg3)) } This time I did test it as I should have last time, so I can tell you that if all args are missing you'll get the full master.frame. Duncan Murdoch > > -- > > jared tobin, student research assistant > dept. of fisheries and oceans > [EMAIL PROTECTED] > > -----Original Message----- > From: Duncan Murdoch [mailto:[EMAIL PROTECTED] > Sent: Thursday, June 14, 2007 11:28 AM > To: Tobin, Jared > Cc: r-help@stat.math.ethz.ch > Subject: Re: [R] Using subset() in a user-defined function > > 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. ______________________________________________ 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.