Re: [Rd] On the mechanics of function evaluation and argument matching

2013-07-17 Thread R. Michael Weylandt
On Wed, Jul 17, 2013 at 9:58 AM, Brian Rowe r...@muxspace.com wrote: Hello, Section 4.3.2 of the R language definition [1] states that argument matching to formal arguments is a 3-pass process to match arguments to a function. An error is generated if any (supplied) arguments are left

[Rd] On the mechanics of function evaluation and argument matching

2013-07-17 Thread Brian Rowe
Hello, Section 4.3.2 of the R language definition [1] states that argument matching to formal arguments is a 3-pass process to match arguments to a function. An error is generated if any (supplied) arguments are left unmatched. Interestingly the opposite is not true as any unmatched formals

Re: [Rd] On the mechanics of function evaluation and argument matching

2013-07-17 Thread Brian Rowe
Thanks for the lead. Given the example in ?missing though, wouldn't it be safer to explicitly define a default value of NULL: myplot - function(x, y=NULL) { if(is.null(y)) { y - x x - 1:length(y) } plot(x, y) } On Jul 17, 2013, at 11:05 AM, R. Michael Weylandt

Re: [Rd] On the mechanics of function evaluation and argument matching

2013-07-17 Thread Ben Bolker
Brian Rowe rowe at muxspace.com writes: Thanks for the lead. Given the example in ?missing though, wouldn't it be safer to explicitly define a default value of NULL: myplot - function(x, y=NULL) { if(is.null(y)) { y - x x - 1:length(y) } plot(x, y) } [snip] In

Re: [Rd] On the mechanics of function evaluation and argument matching

2013-07-17 Thread Peter Meilstrup
On Wed, Jul 17, 2013 at 10:20 AM, Ben Bolker bbol...@gmail.com wrote: Brian Rowe rowe at muxspace.com writes: Thanks for the lead. Given the example in ?missing though, wouldn't it be safer to explicitly define a default value of NULL: myplot - function(x, y=NULL) {

Re: [Rd] On the mechanics of function evaluation and argument matching

2013-07-17 Thread Brian Rowe
I agree that failing fast is a good principle. My initial point led the other way though, i.e. any unmatched formal arguments without default values should be handled in one of two ways: 1. Fail the function call. This is what most non-functional languages do e.g. Python def f(x,y,z): x ...