以下是我正在使用的数据框架结构:
> str(final.c)
'data.frame': 218916 obs. of 7 variables:
$ strain : chr "CX11285" "ED3048" "JU1200" "CX11315" ...
$ row : Factor w/ 8 levels "A","B","C","D",..: 1 1 1 1 1 1 2 2 2 2 ...
$ col : Factor w/ 12 levels "1","2","3","4",..: 1 3 5 7 9 11 1 3 5 7 ...
$ variable: Factor w/ 79 levels "n","meanTOF",..: 1 1 1 1 1 1 1 1 1 1 ...
$ value : num 312 697 159 381 175 110 324 198 179 375 ...
$ L1 : int 1 1 1 1 1 1 1 1 1 1 ...
$ set : num 1 1 1 1 1 1 1 1 1 1 ...
以下是ggplot:
生成的直方图示例var <- "norm.n"
plate <- c(1,5)
dat <- final.c
day <- 1
plot <- ggplot(subset(dat, variable %in% var & L1 %in% plate & set %in% day),
aes(value, fill = factor(L1))) + geom_histogram()
上面的图显示了这个大型融合数据的一个子集。我说它已经融化了,因为我在&#34; final.c&#34;之前的一个data.frames列表上运行了熔化。具体地说,该子集在set = 1&amp;当变量=&#34; norm.n&#34; &安培;当L1 = 1或5.这会产生两个直方图,我按颜色分割。
我想要做的是设计一个生成多个图的函数。这些情节包括: 直方图绘制&#34;板&#34; (在final.c中为L1)1至每个var的板5-30(在final.c中的变量)。这也必须按集合进行分组,其中有2个(集合1和集合2)
因此,这将产生26(板比较数)X 80(final.c中的变量数)= 2080个图。我将对变量列表进行子集化,以使图表更易于管理,但这个想法应该是相同的。
为了问题,我们可以在这个例子中调用变量v1 ... v80
感谢您提供的任何帮助,我会定期检查可能不清楚的任何内容。
编辑 ::
根据评论中的建议,我做了一个简单的for循环来生成每个板块的图(final.c中的L1)比较,它如下:
for(i in 5:10){
var <- "norm.n"
plate <- c(1, i)
dat <- final.c
day <- 1
plot <- ggplot(subset(dat, variable %in% var & L1 %in% plate & set %in% day),
aes(value, fill = factor(L1))) + geom_histogram()
setwd("~/Dropbox/Andersen lab/LabFolders/Stefan/testplots/")
ggsave(filename = paste(var, i, ".jpg", sep = ""), plot = plot, height=4, width=8, units="in", dpi=300)
}
这给出了6个直方图,比较了来自final.c的两个不同的L1值。我可以很容易地扩展它以进行所有板块比较(例如(i,在5:30))。
这是剩下的问题 - 如何循环通过板并同时通过变量。 &#34;变量&#34; final.c中的列是一组具有79个级别的因子。我想做的是循环这些因素,但我不知道如何。如下所示:
for(i in 5:10){
var <- ***LOOP THROUGH VARIABLES COLUMN IN final.c***
plate <- c(1, i)
dat <- final.c
day <- 1
我只是不确定有关此问题的语法。
答案 0 :(得分:0)
这是我想出的正确方向@shujaa
for(j in levels(final.c$variable)){
for(i in 5:6){
var <- j
plate <- c(1, i)
dat <- final.c
day <- 1
plot <- ggplot(subset(dat, variable %in% var & L1 %in% plate & set %in% day),
aes(value, fill = factor(L1))) + geom_histogram()
setwd("~/Dropbox/Andersen lab/LabFolders/Stefan/testplots/")
ggsave(filename = paste(var, j, i, ".jpg", sep = ""), plot = plot, height=4, width=8, units="in", dpi=300)
}
}
所有仍需要合并的是第1组和第2组,但此时应该是直接的
答案 1 :(得分:0)
您需要嵌套循环。为了便于理解,我们不会使用i
和j
,而是使用更具描述性的名称。
此外,您应该能够在循环之前设置一次工作目录。将final.c
复制到dat
也是不必要的。
像这样的东西
setwd("~/Dropbox/Andersen lab/LabFolders/Stefan/testplots/")
for (end_plate in 5:10) {
for (var in unique(final.c$variable)) {
plate <- c(1, end_plate)
day <- 1
plot <- ggplot(subset(final.c, variable %in% var & L1 %in% plate & set %in% day),
aes(value, fill = factor(L1))) + geom_histogram()
ggsave(filename = paste(var, end_plate, ".jpg", sep = ""),
plot = plot, height=4, width=8, units="in", dpi=300)
}
}