2016-04-23 1 views
0

Ich möchte for loop verwenden, um eine Liste von ggplots zu generieren.Verwenden Sie für die Schleife in ggplot2, um eine Liste zu generieren

sig_snp<-c("rs644045_A","rs12997044_C","rs17739727_A") 

p_re<-list() 

for (i in sig_snp){ 
test %>% dplyr::select(i,type,micro1) %>% 
ggplot(aes(factor(type),log(micor1))) + 
geom_boxplot(aes(fill = factor(i)))+ 
xlab('')+ylab('log abundance')->p_re[[i]] 
} 

Die erro zeigt unter:

Error: All select() inputs must resolve to integer column positions. The following do not: * i

ich auf diese Weise jede i in der for-Schleife haben getestet:

test %>% dplyr::select(rs644045_A,type,micro1) %>% 
    ggplot(aes(factor(type),log(micor1))) + 
    geom_boxplot(aes(fill = factor(rs644045_A)))+ 
    xlab('')+ylab('log abundance') 

Es funktionierte einfach, aber warum in der Schleife nicht funktionieren ?

+0

Wo ist 'test'? Bitte zeigen Sie ein reproduzierbares Beispiel – akrun

+1

[Info, wie man ein reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap

+0

Ich dachte Es war ein Syntaxproblem: Wie mache ich das 'i' in der for-Schleife so, dass es als roher Name ohne Anführungszeichen erkannt wird? Als ich jedes "i" in der for-Schleife testete, funktionierte es einzeln. – Ming

Antwort

0

erhielt die Idee Wenn Sie ggplot Ausgabe pro SNP in einer Liste müssen halten, ist es vielleicht besser zu verwenden lapply, die Liste ausgeben wird, zB:

library(ggplot2) 

#dummy data 
test <- mtcars 

#significant SNPs 
sig_snp <- c("mpg", "cyl", "disp") 

#create list of ggplots per SNP 
p_re <- 
    lapply(sig_snp, function(i){ 

    ggplot(test, aes_string("qsec", i)) + 
     geom_point() 

    }) 

#assign names 
names(p_re) <- sig_snp 

#plot 
p_re$mpg 
1

Der schwierige Teil ist select_ und get():

Die get() Antworten von hier waren: Remove quotes from a character vector in R

aber in meinem Fall, es hat nicht funktioniert in der loop.I denke, es ist wahrscheinlich zu verdoppeln Schleifen in meinem Code (ich bin mir nicht sicher).

Wie auch immer, es gibt eine alternative Möglichkeit, es zu machen:

test[,c(sig_snp,"type","micro1")]%>% 
    melt(id=c("type","micro1"))%>% # head() 
    ggplot(aes(factor(type),log(micro1))) + 
    geom_boxplot(aes(fill = factor(value)))+ 
    xlab('')+ylab('log abundance')+facet_grid(.~variable) 

ich von hier Looping over variables in ggplot