I have a couple of hundred American Community Survey Summary Files files
containing rectangular arrays of data, mainly though not exclusively
numeric.  Each file is referred to as a sequence (henceforth "seq").  From
these files I am trying to extract particular subsets (tables) consisting of
a sets of columns.  These tables are defined by three numbers (now in
columns in a data frame):
1.      a file identifier (seq)
2.      first column position numbers (startNo) 
3.      length of table (len)
so the columns to select for one triple would consist of
startNo:(startNo+length-1).   I am trying to create for each sequence a
vector of all the column numbers for tables in that sequence.

Obviously I could do this with nested for loops,e.g..

> seq <- c(1,1,2,2)
> startNo  <- c(3, 10, 3, 15)
> len <- c(4, 2, 5, 3)
> data.df <- data.frame(seq, startNo, len)
> 
> seq.f <- factor(data.df$seq)
> data.l <- split(data.df, seq.f)
> selectColsList<- vector("list", length(levels(seq.f)))
> for (i in seq_along(levels(seq.f))){
   selectCols <- numeric()
       for (j in seq_along(data.l[[i]]$startNo)){
           selectCols <- c(selectCols, 
data.l[[i]]$startNo[j]:(data.l[[i]]$startNo[j]
           data.l[[i]]$len[j]-1))
        }
    selectColsList[[i]] <- selectCols
}
> selectColsList
[[1]]
[1]  3  4  5  6 10 11
[[2]]
[1]  3  4  5  6  7 15 16 17

But this code strikes me as inelegant and verbose. It seems to me that there
ought to be a way to make the outer loop, (indexed with i) into a tapply
function (which is why I started with a split()), and the inner loop
(indexed with j) into some cute recursive function, but I was not able to do
so. If anyone could suggest some nicer (e.g. shorter, or faster, or just
more sophisticated) way to do this instead, I would be most grateful.

Sincerely, andrewH




--
View this message in context: 
http://r.789695.n4.nabble.com/replacing-ugly-for-loops-tp4645821.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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