Hi Henrik and David,
Thank you very much for your suggestions. I found both meet my needs.
In the following code, I found save(obj,file=pathname) would save the
content into an object called obj.
path <- "~/";
dir.create(path);
for (i in 1:10) {
assign( paste("m", i, sep=""), i:5)
filename <- sprintf("m%02d.Rdta", i)
pathname <- file.path(path, filename)
obj =get(paste("m", i, sep=""))
save(obj, file=pathname)
}
A tweak to this would be
path <- "~/";
dir.create(path);
for (i in 1:10) {
assign( paste("m", i, sep=""), i:5)
filename <- sprintf("m%02d.Rdta", i)
pathname <- file.path(path, filename)
save(list = paste("m", i, sep=""), file=pathname)
}
Thanks a lot
Hao
-----Original Message-----
From: henrik.bengtsson at gmail.com [mailto:henrik.bengtsson at gmail.com] On
Behalf Of Henrik Bengtsson
Sent: Monday, November 02, 2009 12:34 AM
To: David Winsemius
Cc: r-help at r-project.org; jeffc
Subject: Re: [R] save an object by dynamicly created name
On Sun, Nov 1, 2009 at 9:18 PM, David Winsemius <dwinsemius at comcast.net>
wrote:
On Nov 1, 2009, at 11:28 PM, Henrik Bengtsson wrote:
On Sun, Nov 1, 2009 at 7:48 PM, David Winsemius <dwinsemius at comcast.net>
wrote:
On Nov 1, 2009, at 10:16 PM, Henrik Bengtsson wrote:
path <- "data";
dir.create(path);
for (i in 1:10) {
?m <- i:5;
?filename <- sprintf("m%02d.Rbin", i);
?pathname <- file.path(path, filename);
?save(m, file=pathname);
}
That would result in each of the ten files containing an object with the
same ?name == "m". (Also on my system R data files have type Rdta.) So I
thought what was requested might have been a slight mod:
path <- "~/";
dir.create(path);
for (i in 1:10) {
?assign( paste("m", i, sep=""), ?i:5)
?filename <- sprintf("m%02d.Rdta", i)
?pathname <- file.path(path, filename)
?obj =get(paste("m", i, sep=""))
?save(obj, file=pathname)
}
Then a more convenient solution is to use saveObject() and
loadObject() of R.utils. ?saveObject() does not save the name of the
object save.
The OP asked for this outcome :
" I would like to save m as m1, m2, m3 ...,
to file /home/data/m1, /home/data/m2, home/data/m3, ..."
?If you want to save multiple objects, the wrap them up
in a list.
I agree that a list would makes sense if it were to be stored in one file
,
although it was not what requested.
That comment was not for the OP, but for saveObject()/loadObject() in
general.
But wouldn't that require assign()-ing a name before list()-wrapping?
Nope, the whole point of using saveObject()/loadObject() is to save
the objects/values without their names that you happens to choose in
the current session, and to avoid overwriting existing ones in your
next session. My example could also have been:
library("R.utils");
saveObject(list(a=1,b=LETTERS,c=Sys.time()), file="foo.Rbin");
y <- loadObject("foo.Rbin");
z <- loadObject("foo.Rbin");
stopifnot(identical(y,z));
If you really want to attach the elements of the saved list, do:
attachLocally(loadObject("foo.Rbin"));
?loadObject() does not assign variable, but instead return
them. Example:
library("R.utils");
x <- list(a=1,b=LETTERS,c=Sys.time());
saveObject(x, file="foo.Rbin");
y <- loadObject("foo.Rbin");
stopifnot(identical(x,y));
So, for the original example, I'd recommend:
library("R.utils");
path <- "data";
mkdirs(path);
for (i in 1:10) {
?m <- i:5;
?filename <- sprintf("m%02d.Rbin", i);
?saveObject(m, file=filename, path=path);
}
and loading the objects back as:
for (i in 1:10) {
?filename <- sprintf("m%02d.Rbin", i);
?m <- loadObject(filename, path=path);
?print(m);
}
/Henrik
--
David.
/H
On Sun, Nov 1, 2009 at 6:53 PM, jeffc <hcen at andrew.cmu.edu> wrote:
Hi,
I would like to save a few dynamically created objects to disk. The
following is the basic flow of the code segment
for(i = 1:10) {
?m = i:5
?save(m, file = ...) ## ???
}
To distinguish different objects to be saved, I would like to save m