I should mention the idea I worked on yesterday was cat()ing together the appropriate condition strings and then ideally printing that entire concatenated string into the subset argument. However, as far as I know, cat() only prints directly on the console and cannot be used to substitute input text into a function, so I scrapped that idea.
Just figured I'd mention that in case there does happen to be a way to do such a thing, and someone knows of a way offhand. -- jared tobin, student research assistant dept. of fisheries and oceans [EMAIL PROTECTED] -----Original Message----- From: Tobin, Jared Sent: Thursday, June 14, 2007 12:28 PM To: 'Duncan Murdoch' Cc: r-help@stat.math.ethz.ch Subject: RE: [R] Using subset() in a user-defined function 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. -- 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.