[Rd] unexpected behaviour when defining a function

Gabor Grothendieck ggrothendieck at gmail.com
Tue Sep 12 07:55:55 CEST 2006


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 at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>




More information about the R-devel mailing list