[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