[R] Existence of formal arguments.

Charilaos Skiadas cskiadas at gmail.com
Fri Jun 6 06:01:31 CEST 2008


On Jun 5, 2008, at 9:13 PM, Duncan Murdoch wrote:

> On 05/06/2008 8:23 PM, Rolf Turner wrote:
>> I just discovered what seems to me to be a slight funny in respect
>> of formal argument names.  If I define a function
>> 	foo <- function(a,b){ ... whatever ...}
>> then ``inside'' foo() the exists() function will return TRUE
>> from ``exists("a") whether an object named ``a'' exists or not.
>> But get("a") will yield an error ``object "a" not found''
>> in these circumstances.
>> I presume there is a reason for specifying that an object named
>> by a formal argument always exists --- but it is mysterious by my
>> standards.  Can anyone explain the reason for this behaviour?
>
> Oops, I didn't explain why this is the way it should be.
>
> Say your "whatever" above makes use of a, but you didn't pass an a  
> in. Then you'd like an error, or you'd like "missing(a)" to  
> evaluate to TRUE, or something along those lines.  But if a was  
> completely undefined and nonexistent, R would just go looking for a  
> global, and make use of that.  So it has to be marked as missing.

I am now baffled by this:

 > foo <- function(a,b){class(get("a"))}
 > foo()
[1] "name"

 > foo <- function(a,b){x<-get("a");class(x)}
 > foo()
Error in foo() : argument "x" is missing, with no default

And similarly with str:

 > foo <- function(a,b){str(get("a"))}
 > foo()
symbol
 > foo <- function(a,b){x<-get("a");str(x)}
 > foo()
Error in str(x) : argument "x" is missing, with no default


Well OK, maybe not baffled exactly, it short of fits with your  
description above. I guess I am wondering, how is this technically  
achieved?
I suppose then that missing(a) the only call we should expect to work  
in the absence of a, even though calls like class(get("a")) and str 
(get("a")), is.numeric(get("a")) etc seem to return something  
reasonable?

> Duncan Murdoch

Haris Skiadas
Department of Mathematics and Computer Science
Hanover College



More information about the R-help mailing list