Hello,

The first argument to exists() must be the name of an object given as a character string, as stated in the help page. See ?exists. You have also forgot to initialize combined to NULL, this time.
Your function revised would then become


c_objects <- function(FILES) {
  combined <- NULL
  for (FILE in FILES) {
    load(FILE)
    if (exists("combined")) {
      combined <- c(combined, res)
    } else {
      combined <- res
    }
  }
  return(combined)
}


And all works as expected.

Hope this helps,

Rui Barradas


Em 18-06-2013 14:57, Davis, Brian escreveu:
In my haste to make a smaller example than my actual code I used 'is.null' 
instead of 'exists' as is in my code.  Here's a small reproducible example


res <- list(abc=letters, ABC=LETTERS)
save(res, file="results.RData")
res <- list(zyx=rev(letters), ZYX=rev(LETTERS))
save(res, file="results2.RData")

rm(res)
FILES <- c("results.RData", "results2.RData")


c_objects <- function(FILES) {
   for (FILE in FILES) {
     load(FILE)
     if (exists(combined)) {
       combined <- c(combined, res)
     } else {
       combined <- res
     }
   }
   return(combined)
}

combined_results <- c_objects(FILES)


-----Original Message-----
From: Duncan Murdoch [mailto:murdoch.dun...@gmail.com]
Sent: Monday, June 17, 2013 5:40 PM
To: Davis, Brian
Cc: r-help@r-project.org
Subject: Re: [R] Help understanding environments

On 13-06-17 5:02 PM, Davis, Brian wrote:
I have a collection of .RData files that have result objects that I would like 
to combine.  Specifically, skatCohort objects from the skatMeta package, but 
I've run into a similar issue with simple data.frames also.

If I run something like

FILES <- list.files(path="/path/to/my/results", pattern=".RData$",
full.names=TRUE) combined <- NULL
    for (FILE in FILES) {
      load(FILE)
      if (!is.null(combined)) {
        combined <- c(combined, res)
      } else {
        combined <- res
      }
    }

I get all my objects combined.  However, if I wrap this into a
function I get the following error

c_objects <- function(FILES) {
    combined <- NULL
    for (FILE in FILES) {
      load(FILE)
      if (!is.null(combined)) {
        combined <- c(combined, res)
      } else {
        combined <- res
      }
    }
    return(combined)
}

combined_results <- c_objects(FILES)
Error in eval(expr, envir, enclos) : object 'combined' not found

How should I write this function such that it can find "combined".   I've tried 
reading the help on envirnaments, and the exisits function but I haven't been able to 
figure this out.  Are there any other resources to read up on this?

You are doing something that you aren't showing us:  I don't see any calls to 
eval(), but it's eval() that generated the error.

Calling traceback() after the error might be informative.

Duncan Murdoch


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to