2016-04-23 8 views
0

を使用してggplotsのリストを生成したいと考えています。リストを生成するためにggplot2のループを使用する

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]] 
} 

ERROは以下を示しています。

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

私はこのようにforループ内の各iをテストした:

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

それは単独で働いていたが、なぜループで動作しません?

+0

'test'はどこですか?再現可能な例を表示してください – akrun

+1

[再現可能な例を与える方法に関する情報](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap

+0

私は考えましたそれは構文上の問題でした。forループの 'i'を引用符を除いた生の名前として認識させるにはどうしたらいいですか? forループでそれぞれ 'i'をテストしたところ、単独で動作しました。 – Ming

答えて

0

からアイデアを得ましたリストを出力するlapplyを使用する例:

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

トリッキーな部分はselect_get()です:

get()答えはここからだった:Remove quotes from a character vector in R

しかし、私の場合には、それはおそらく倍増する予定であると考えloop.Iでは動作しませんでした私のコードのループ(私はわかりません)。

はとにかく、それを作るための別の方法があります:

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) 

私はあなたのリストにSNPあたりggplot出力を維持する必要がある場合、それはおそらく良いですここLooping over variables in ggplot

関連する問題