[Rd] using function names as parameters (PR#469)

Friedrich.Leisch@ci.tuwien.ac.at
Fri, 03 Mar 2000 12:10:19 -0000

>>>>> On 03 Mar 2000 12:55:21 +0100,
>>>>> Peter Dalgaard BSA (PDB) wrote:

PDB> hothorn@ci.tuwien.ac.at writes:
>> When using a function name as parameter, here date, the following
happends:
>>
R> foo <- function(date=date()) cat(date, "\n")
R> foo()
>> Error in cat(date, "\n") : recursive default argument
reference

PDB> This is not a bug. Default arguments are evaluated in the frame of the
PDB> called function, so when the date variable is requested and no actual
PDB> argument was supplied, R tries to evaluate the default expression, but
PDB> that involved the variable "date" again. If you pass an
argument, the
PDB> default expression is never evaluated and the problem does not arise.

PDB> Similarly a definition like

PDB> function(x=y, y=x) x + y

PDB> is asking for trouble if both x and y are left unspecified on the call.

PDB> [This has nothing to do with passing functions as parameters, by the
PDB> way]

[Taken to r-core]

Hmm, I asked Torsten to mail the bug report ... I first thought along
your lines and I would agree if I pass ``date'' as default, but we
have ``date()'' as default argument which is the return value of the
function, no?

IMO evaluating the default expression comes down to evaluating
``date <- date()'' which is perfectly legal ...

BTW, BB can do it:

S> foo <- function(date=date()) cat(date, "\n")
S> foo()
Fri Mar  3 09:49:20 MET 2000
Warning messages:
  looking for function "date", ignored local non-function in: foo()


.f