[R] Looping through multiple datasets already in memory

William Dunlap wdunlap at tibco.com
Sat Sep 10 01:54:43 CEST 2011


You can also use list syntax, env$name or env[["name"]],
with environments to avoid the ugliness of get()
and assign() and to ease your way over to at
least using a dedicated environment (if not a list)
for your related objects instead of filling the
global environment to various collections of objects
related only by name.

Here is an untested example:
 readFilesAndAssign <- function(envir, fileNames) {
    objNames <- sub("\\.[[:alpha:]]+", "", fileNames) # remove .csv, etc.
    for(i in seq_along(fileNames)) {
        envir[[ objNames[i] ]] <- read.csv(fileNames[i])
    }
    envir
 }
If you want all those objects in the global environment
call this as
  readFilesAndAssign(.GlobalEnv, c("one.csv", "two.csv", "three.csv"))
but if you want to keep things more organized (and not accidently
overwrite data in the global environment) do
  objEnv <- new.env()
  readFilesAndAssign(objEnv, c("one.csv", "two.csv", "three.csv"))
The same function works if the envir variable is a list,
but you have to save its return value to keep its results
  objList <- readFilesAndAssign(list(), c("one.csv", "two.csv", "three.csv"))

In all cases, if I have written this correctly, the function
will read the files "one.csv", "two.csv", and "three.csv"
and put the results into objects called "one", "two", and
"three" into either the object or list that you supply.  You
can later access them with syntax like
  objList[["one"]] # objEnv or .GlobalEnv, depending on how you call it
or
  with(objEnv, lm(data=one, y~x))) # or objList or .GlobalEnv, depending ...

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Greg Snow
> Sent: Friday, September 09, 2011 2:31 PM
> To: MatAra; r-help at r-project.org
> Subject: Re: [R] Looping through multiple datasets already in memory
> 
> The best approach is to put all those datasets into a list, then you can loop through the elements of
> the list, or use lapply or sapply on the list.
> 
> If you insist on keeping them outside of a list, or need a loop to put them into the list, then look
> at the 'get' function.
> 
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of MatAra
> Sent: Friday, September 09, 2011 12:26 PM
> To: r-help at r-project.org
> Subject: [R] Looping through multiple datasets already in memory
> 
> Gents,
> 
> I have the following loop:
> 
> for (i in (seq(along=Draw.1[,1]))) {print(i)} # from 1 - 5 (counter)
> for (i in (seq(along=Draw.1[,1]))) {print(Draw[i,4])} # from the 1 - column
> (passes parameter per column)
> 
> Now: I have multiple Draws [Draw.1 - Draw.100] in memory with different
> "orders"
> Question: How do I loop through  each Draw.[j]? OR in other way, how do I
> pick up all the datasets from memory dynamically?
> 
> Something like:
> for (i in (seq(along=Draw.[J][,1]))) {print(Draw[i,4])}
> 
> paste() would not allow me to pick the [row,col] combination I need. It just
> passes the list of all the elements.
> paste(as.matrix(Draw), 1, sep=".")[10,5] DOES NOT WORK
> 
> Thanks in advanced for the ideas!
> 
> An example of how the draw (control files) looks like:
> 
> Draw.1
>       ID     Name                 Tab   Folder      L/S
>  [1,] "  38" "Stoxx50_24_08_11"   "38"  "Stoxx"     "-1"
>  [2,] "  47" "Stoxx50_24_08_11"   "47"  "Stoxx"     " 1"
>  [3,] " 153" "DAX_31_08_11"       "29"  "DAX"       " 1"
>  [4,] " 256" "FT100_31_08_11"     "12"  "UK"        " 1"
>  [5,] " 303" "FT100_31_08_11"     "59"  "UK"        " 1"
> 
> 
> --
> View this message in context: http://r.789695.n4.nabble.com/Looping-through-multiple-datasets-already-
> in-memory-tp3802453p3802453.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-help at 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.
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list