An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20090420/2a3ba081/attachment-0001.pl>
Calling objects in a loop
4 messages · Brendan Morse, Duncan Murdoch, Dimitri Liakhovitski +1 more
On 4/20/2009 2:35 PM, Brendan Morse wrote:
Hi everyone, I am trying to calculate a particular variable (vector) from
some previously defined variables in a loop but I am having trouble figuring
out how to get the loop to recognize that it should index for the previously
defined objects. Here is a simplified version of what I am trying to do:
for(i in 1:10){
assign(paste("theta1_",i,sep=""),data.frame(scale(rnorm(250))))
assign(paste("theta2_",i,sep=""),data.frame(scale(rnorm(250))))
assign(paste("theta3_",i,sep=""),data.frame(theta1_i +
theta2_i)
}
I am having trouble with getting it to recognize that theta3_i should be
calculated using theta1_i and theta2_i in the third line. In other words,
theta3_1 should equal theta1_1+theta2_1 whereas theta3_2 should equal
theta1_2+theta2_2
Any advice as to where I am losing this one?
You have no variables theta1_i and theta2_i. You would have to
construct the names and use get() to get the associated values. But why
make your life so complicated? Why not just store everything in lists,
indexed by i? E.g.
theta1 <- list()
theta2 <- list()
theta3 <- list()
for (i in 1:10) {
theta1[[i]] <- data.frame(scale(rnorm(250)))
etc.
(You could even put everything in a single list of lists, but I don't
think that makes it easier to read.)
Duncan Murdoch
Brendan,
I think you should create objects outside of the "for" loop. You can't
create objects instide the loop. You can try this:
metalist1<-list()
for(i in 1:10) {metalist1[[i]]<-assign(paste("theta1_",i,sep=""),data.frame(scale(rnorm(250))))}
lapply(metalist1,function(x){print(dim(x))}) # Checking it out
metalist2<-list()
for(i in 1:10) {metalist2[[i]]<-assign(paste("theta1_",i,sep=""),data.frame(scale(rnorm(250))))}
lapply(metalist1,function(x){print(dim(x))}) # Checking it out
metalist3<-list()
for(i in 1:10) {metalist3[[i]]<-metalist1[[i]]+metalist2[[i]]}
lapply(metalist3,function(x){print(dim(x))}) # Checking it out
# Checking
sum(metalist1[[1]]+metalist2[[1]])
sum(metalist3[[1]])
Dimitri
On Mon, Apr 20, 2009 at 2:35 PM, Brendan Morse <morse.brendan at gmail.com> wrote:
Hi everyone, I am trying to calculate a particular variable (vector) from
some previously defined variables in a loop but I am having trouble figuring
out how to get the loop to recognize that it should index for the previously
defined objects. Here is a simplified version of what I am trying to do:
for(i in 1:10){
assign(paste("theta1_",i,sep=""),data.frame(scale(rnorm(250))))
assign(paste("theta2_",i,sep=""),data.frame(scale(rnorm(250))))
? ? ? ? ? ? ? ? ? ? ?assign(paste("theta3_",i,sep=""),data.frame(theta1_i +
theta2_i)
? ? ? ? ? ? ? ? ? }
I am having trouble with getting it to recognize that theta3_i should be
calculated using theta1_i and theta2_i in the third line. In other words,
theta3_1 should equal theta1_1+theta2_1 whereas theta3_2 should equal
theta1_2+theta2_2
Any advice as to where I am losing this one?
Thanks,
brendan
? ? ? ?[[alternative HTML version deleted]]
______________________________________________ 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.
Dimitri Liakhovitski MarketTools, Inc. Dimitri.Liakhovitski at markettools.com
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20090420/a6691ff1/attachment-0001.pl>