Steven Kang schrieb:
Dear R users,


I would like to accumulate objects generated from 'for' loop to a list or
array.

To illustrate the problem, arbitrary data set and script is shown below,


x <- data.frame(a = c(rep("n",3),rep("y",2),rep("n",3),rep("y",2)), b =
c(rep("y",2),rep("n",4),rep("y",3),"n"), c = c(rep("n",7),rep("y",3)), d =
c("y", rep("n",4), rep("y",2), rep("n",3)))

for (i in 1:(dim(x)[2]))  {
         assign(paste("ind", i, sep = ""), which(x[ , i] == "y"))
          accum <- c(ind1, ind2, ind3, ind4)
}


Using "for" loops is not idiomatic; I tend to use them only if I really need intermediate results.

res <- apply(x, 2, function(answer) which(answer == "y"))

names(res) <- paste("ind", 1:ncol(x), sep="")

ind1
[1]  4  5  9 10
ind2
[1] 1 2 7 8 9
ind3
[1]  8  9 10
ind4
[1] 1 6 7
accum
 [1]  4  5  9 10  1  2  7  8  9  8  9 10  1  6  7

Are there any alternative method where the highlighted statement above can
be represented without typing individual objects manually? (as it can be
very tedious with large number of objects; i.e ind1, ind2, ....., ind100)

/I think you are looking for unlist()./

Also, is there any way to extract individual objects ('ind1' etc) from
'accum'?

Well, I think they are not objects by themselves anymore. You may want to give the vector elements individual names based on their origin and then extract appropriate elements by string matching.

______________________________________________
R-help@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.

Reply via email to