我想使用for loop
生成ggplots
的列表。
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]]
}
错误显示如下:
错误:所有select()输入必须解析为整数列位置。 以下不: *我
我已经以这种方式测试了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 :(得分:1)
棘手的部分是select_
和get()
:
get()
答案来自此处:Remove quotes from a character vector in R
然而,在我的情况下,它在循环中不起作用。我认为这可能是由于我的代码中的双循环(我不确定)。
无论如何,还有另一种方法可以做到:
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)
我从这里得到了这个想法Looping over variables in ggplot
答案 1 :(得分:0)
如果你需要在列表中保留每个SNP的ggplot输出,那么最好使用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