Another way to assign a list is using my_list[[name or number]] <- . If you really want to do this in a loop, just iterate over things with names like iter1, iter2, ...
A <- list() n_iter <- 2 for (i in 1:n_iter){ iname <- paste("iter",i,sep="") A[[iname]] <- get(iname) }
As @mnel noted, a dynamically growing list is inefficient. An alternative, I think, to use lapply :
n_iter <- 2 inames <- paste("iter",1:n_iter,sep="") names(inames) <- inames A <- lapply(inames,get)
This can also be done with a data frame, which would be a better format if you always have two elements in your sublists, each of which has a consistent class (element1 is a number and element 2 is a symbol).
n_iter <- 2 DF <- data.frame(item1=rep(0,n_iter),item2=rep("",n_iter),stringsAsFactors=FALSE) for (i in 1:n_iter){ iname <- paste("iter",i,sep="") DF[i,] <- get(iname) rownames(DF)[i] <- iname }
However, this is a pretty ugly way of doing things; when using get things get messy. With your data structure, perhaps you want to create iter1 and iter2 in a loop and instantly embed them in the parent list or data frame?
n_iter = 10 DF <- data.frame(item1 = rep(0,n_iter), item2 = rep("",n_iter)) for (i in 1:n_iter){ ... do stuff to make anum and achar ... DF[i,"item1"] <- anum DF[i,"item2"] <- achar }
Where anum and achar are the values โโof item1 and item2 that you want to keep from this iteration. Elsewhere on SO, they say there is an alternative using the data.table package, which is almost 10x as fast / efficient as this type of data frame destination.
Oh, one last idea: if you want to put them in a list first, you can easily convert it to a data frame later using
DF <- do.call(rbind.data.frame,A)