[R] loading saved files with objects in same names

Duncan Murdoch murdoch.duncan at gmail.com
Wed Aug 20 15:12:04 CEST 2014


On 20/08/2014, 8:58 AM, Barry Rowlingson wrote:
> On Tue, Aug 19, 2014 at 1:30 AM, Jinsong Zhao <jszhao at yeah.net> wrote:
>> Hi there,
>>
>> I have several saved data files (e.g., A.RData, B.RData and C.RData). In
>> each file, there are some objects with same names but different
>> contents. Now, I need to compare those objects through plotting.
>> However, I can't find a way to load them into a workspace. The only
>> thing I can do is to rename them and then save and load again.
>>
>> Is there a convenient to load those objects?
>>
>> Thanks a lot in advance.
> 
> The technique of loading into an environment already mentioned can be
> cleaned up and put into a function.
> 
> First lets save a thing called "x" into two files with different values:
> 
>  > x="first"
>  > save(x,file="f.RData"))
>  > x="second"
>  > save(x,file="s.RData")
> 
> This little function wraps the loading:
> 
>  > getFrom=function(file, name){e=new.env();load(file,env=e);e[[name]]}
> 
> So now I can get 'x' from the first file - the value is returned from
> `getFrom` so I can assign it to anything:
> 
>  > x1 =  getFrom("f.RData","x")
>  > x1
> [1] "first"
>  > x2 = getFrom("s.RData","x")
>  > x2
> [1] "second"
> 
> And I can even loop over RData files and read in all the `x`s into a vector:
> 
>  > sapply(c("f.RData","s.RData"),function(f){getFrom(f,"x")})
>   f.RData  s.RData
>   "first" "second"
> 
> (on second thoughts, possibly 'loadFrom' is a better name)

That's a nice little function.  You could also have lsFrom, that lists
the objects stored in the file, along the same lines:

lsFrom <- function(file, all.names = FALSE, pattern) {
  e <- new.env()
  load(file, envir = e)
  ls(e, all.names = all.names, pattern = pattern)
}

Duncan Murdoch



More information about the R-help mailing list