You might want to look at how to use 'lapply' to create lists. Here is one way of doing it:
> # create test data > a_threshold <- b_threshold <- as.data.frame(matrix(sample(c(1:5, NA), 100, TRUE), 10)) > classification <- c('a', 'b') > result <- lapply(classification, function(.cls){ + colSums(!is.na(get(paste(.cls, '_threshold', sep='')))) + }) > > result [[1]] V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 9 9 9 9 8 7 7 8 9 8 [[2]] V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 9 9 9 9 8 7 7 8 9 8 > On Sat, May 23, 2009 at 10:32 AM, Nikos Alexandris < nikos.alexand...@felis.uni-freiburg.de> wrote: > Hi R-list. > > This is my first post. I'll try to be as precise as possible with the > difficulty I have to "get things done". > > I have a hard time trying to construct a double "for" loop and create > within the inner loop new objects (in this case vectors). > > I posted this question in a non-directly related with pure R-problems > list (in grass-stats). In addition, I think I wasn't precise enough. > > Many thanks for your time in advance, Nikos > --- > > The data > > * A list of 10 different names called "classifications" > * "data.frames" starting with the "classification" names and a common > "_thresholds" suffix. Each "_thresholds" data.frame contains 10 columns > with numeric values (each column consists of 875 rows) > > > The goal > > I want to create a new vector for each "classification" which will hold > 10 numeric values (e.g. some sum) one for each column in the > "classification"-"thresholds" objects. > > > The code > > # loop over "classifications" > for (x in classifications) { > > # loop over sequence 1 to 10 > for (i in 1:10) > > # store sum's per "source" column > assign ( (paste ( x, "_sums", sep = "" )[i], > sum ( !is.na ( > get ( paste ( x, "_thresholds", sep = "" ) )[ ,i] > ) > ) > ) > } > > > The problem > > The above piece of code gives me 10 new vectors but with only 1 value > (e.g. the last derived from the loop) _instead_ of 10. > > > Questions > > 1. How can I construct this properly > 2. Related question: how can I print the structure of each column of > each "classification" with a for loop? > > e.g. > > # a single loop work perfectly as follows: > for (i in 1:10) str(burned_eig_normalised_cov.omission_thresholds[,i]) > > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > int [1:875] NA NA NA NA NA NA NA NA NA NA ... > logi [1:875] NA NA NA NA NA NA ... > > # now, I would like to say > for (x in classifications) { for (i in 1:10) str(paste(x, > ".omission_thresholds", sep="")[,i]) } > > Error in paste(x, ".omission_thresholds", sep = "")[, i] : > incorrect number of dimensions > > Why is this wrong? Given the common prefix, how can I "paste" the > "prefix and the suffix" and access the columns? > > ______________________________________________ > 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<http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? [[alternative HTML version deleted]] ______________________________________________ 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.