Search code examples
rfor-loopgraphhistogramnested-loops

nested for loop to create histograms named according to list


I'm new to R and need to create a bunch of histograms that are named according to the population they came from. When I try running the loop without the "names" part, it works fine. The code below loops through the list of names and applies them in order, but I end up with 3,364 versions of the same exact histogram. If anyone has any suggestions, I'd really appreciate it.

popFiles <- list.files(pattern = "*.txt") # generates a list of the files I'm working with
popTables <- lapply(popFiles, read.table, header=TRUE, na.strings="NA")
popNames <- read.table(file.path("Path to file containing names", "popNamesR.txt"), header=FALSE,)
popNames <- as.matrix(popNames)

name <- NULL
table <- c(1:58)

for (table in popTables){
   for (name in popNames){
       pVals <- table$p
       hist(pVals, breaks=20, xlab="P-val", main=name))
   }
}

Solution

  • Try making a distinct iterator, and use that, rather than iterating over the table list itself. It's just easier to see what's going on. For example:

    pdf("Myhistograms.pdf")    
    for(i in 1:length(popTables)){
        table = popTables[[i]]
        name = popNames[i]
        pVals = table$p
        hist(pVals, breaks=20, xlab="P-val", main=name))
    }
    dev.off()
    

    In this case, your problem is that name and table are actually linked, but you have two for loops, so actually every combination of table and name are generated.