Re: [Rd] unexpected behaviour when defining a function

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Tue 12 Sep 2006 - 05:55:55 GMT

You can't have x=x in an argument list.

Try the following noting that we put a dot at the end of bar:

> bar <- function() 1
> foo <- function(bar. = bar()) {
+ bar
+ }
> foo()

function() 1
> foo(bar = bar)

function() 1

On 9/11/06, Deepayan Sarkar <deepayan.sarkar@gmail.com> wrote:
> Hi,
>
> I know S manuals used to warn against using the same names for a
> variable and a function, but I have never seen that cause problems in
> R, so I usually don't pay much attention to it. Which is why the
> following behaviour came as a surprise:
>
> > bar <- function() 1
> > foo <- function(bar = bar()) {
> + bar
> + }
> > foo(9)
> [1] 9
> > foo()
> Error in foo() : recursive default argument reference
>
> Exactly what rule am I violating here?
>
> The following gives a slightly different error, but I assume it has a
> similar origin:
>
> bar <- function() 1
> foo <- function(bar) {
> if (missing(bar)) bar <- bar()
> bar
> }
> foo()
>
> This version works fine though (so the rule probably involves function
> arguments somehow):
>
> foo <- function(baz) {
> if (missing(baz)) {
> baz <- function() 2
> baz <- baz()
> }
> baz
> }
> foo()
>
> -Deepayan
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue Sep 12 16:01:03 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 12 Sep 2006 - 06:30:09 GMT.

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