Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

For Loop In R not working with Plot function

I Am trying out a way to figure out how i could print multiple plots at once with a for loop , as i am super new to R i can’t seem to find a way to do this

I Have 40 Principle components that i would like to plot through for loop, but i can only do it individually by calling the function every time ; for loop just does nothing

Below is the function to show or plot principle components

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

showPrincipalComponents <- function(PCNumber) {
tidied_pca %>%
filter(PC == PCNumber) %>%
top_n(11, abs(Contribution)) %>%
mutate(Tag = reorder(Tag, Contribution)) %>%
ggplot(aes(Tag, Contribution, fill = Tag)) +
geom_col(show.legend = FALSE, alpha = 0.8) +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5), 
      axis.ticks.x = element_blank()) + 
labs(x = "Personal attributes",
     y = "Principal Component Importance")

}

This Works:

showPrincipalComponents(comp[1]) 
showPrincipalComponents(comp[2]) 
showPrincipalComponents(comp[3]) 
showPrincipalComponents(comp[4]) 

This Does Not(executes without returning anything):

x=1:40
for (i in x){showPrincipalComponents(comp[i])}

Any Help would be appreciated

>Solution :

You have to do two things to make it work in a for loop.

(1) As @neilfws already points out in the comments, the output of the for loop needs to be assiged (e.g. out[[i]] <-).

(2) Since ggplot uses lazy evaluation only doing (1) will yield the same plot forty times (always the last plot, i = 40). If you want to stick to a for loop instead of an lapply you could wrap the function call into eval(bquote()) and evaluate .(i).

x <- 1:40
out <- vector("list", length = length(x))

for (i in x) {
  out[[i]] <- eval(bquote(
    showPrincipalComponents(comp[.(i)])
  ))
}
out
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading