[R] Testing for existence of object within a function

David Winsemius dwinsemius at comcast.net
Fri Oct 8 01:51:30 CEST 2010


On Oct 7, 2010, at 7:27 PM, Eli Holmes wrote:

> I'm trying to test for the existence of an object within a function,
> but despite searching the help files and R-list, I can't figure out
> how to do it.
>
> Here is some test code:
>
> #-------------------------
> a=1 #now I have a in the global environment
>
> tst <- function(a,b=1) {
> # but a is not in the local function environment
> print(exists("a", inherits=FALSE)) #This is how I think I should be
> able to test if it is in the local function environment
> print(a)
> }
> tst()
> #----------------------
>
> #Here's the output
> [1] TRUE
> Error in print(a) : argument "a" is missing, with no default
>
> It says TRUE, even though I specified inherits=FALSE and "a" is not in
> the function environment.

Yes it is, or at least its name is known, even if it doesn't have a  
value:

a=1 #now I have a in the global environment

tst2 <- function(a,b=1) {
# but a is not in the local function environment
print(ls())
}
tst2()
[1] "a" "b"


tst3 <- function(a,b=1) {
# but a is not in the local function environment
print(formals("tst3"))
} ; tst3()

$a


$b
[1] 1

>  I've tried to pass in where and envir
> arguments to exists() but I haven't been able to solve the problem.

Exactly what IS the problem? If you tested for "d" there would be a  
FALSE return. And does this solve it....

 > tst4 <- function(a,b=1,d=missing(a)) {
+ print(d)
+ } ; tst4()
[1] TRUE

 > tst4 <- function(a,b=1,d=missing(a)) {
+ print(d)
+ } ; tst4(2)
[1] FALSE

-- 

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list