Hey there, I've got a for loop in my code which I'm having difficulty seeing how to avoid.
Here's the code, with some sample data. You can safely copy and paste into the interpreter if you want. #I have some data frames. a <- as.data.frame(matrix(runif(50), nrow = 10, ncol = 5)) b <- as.data.frame(matrix(runif(50), nrow = 10, ncol = 6)) c <-as.data.frame( matrix(runif(50), nrow = 10, ncol = 4)) #They've been presented in a list, and ideally this code would run for any reasonable number of data frames. d <- list(a,b,c) #let's suppose these data frames are time series data sets, which cover overlapping years. #I'm interested in the first column of the first data frame, #the second column of the second #and the third column of the third. #These columns correspond to the same year, lets say 2000, #and I've written a function which spits out which columns corresponding #to the year 2000 in a list L <- list(1,2,3) #I'm interested in computing: # a$x2000/(a$x2000 + b$x2000 + c$x2000) #in the general case #Here's the crux of the issue. I'm using the following to compute proportions of a, b, and c: T <- matrix(ncol = length(d), nrow = nrow (d[[1]]) #a matrix to hold the (in this case) three values. for(i in 1:length(d)) { Li <- L[[i]] #for readability T[,i] <- d[[i]][, Li] } #then I sum across the rows to obtain a total total <- apply(T, 1, sum) #and then compute proportions for each data set: prop <- rep(0, length(total)) for(i in 1:length(d)){ Li <- L[[i]] prop[i] <- d[[i]][, Li] / total[i] } Does anybody have any advice for slimming this down? I feel like this shouldn't really be so complicated. [[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.