【发布时间】:2014-05-12 14:14:27
【问题描述】:
这是我正在使用的数据框结构:
> 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()
上面的图查看了这个大的熔化 data.frame 的一个子集(我说它被熔化了,因为我在“final.c”之前在一个 data.frames 列表上运行了熔化)。具体来说,子集是当 set = 1 & when variable = "norm.n" & 当 L1 = 1 或 5 时。这会生成两个直方图,我将它们按颜色分开。
我想做的是设计一个生成多个图的函数。这些地块将包括: 为每个 var(final.c 中的变量)绘制“板块”(final.c 中的 L1)1 到板块 5-30 的直方图。这也必须按集合分组,其中有 2 个(集合 1 和集合 2)
因此,这将生成 26(板比较数)X 80(final.c 中的变量数)= 2080 个图。我将对变量列表进行子集化,以使绘图更易于管理,但想法应该是相同的。
为了这个问题,我们只调用这个例子中的变量,v1...v80
感谢所有帮助,我会定期检查是否有任何不清楚的地方。
编辑 ::
按照 cmets 中的建议,我做了一个简单的 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 值。我可以轻松扩展它以进行所有板块比较(例如 for(i in 5:30))。
这是剩下的问题 - 如何循环遍历板块并同时遍历变量。 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
我只是不确定有关此的语法。
【问题讨论】:
-
你到底卡在哪里了?您是否尝试过将其包装在
for循环中以通过您想要绘制的板组?试着把你的问题分解成碎片,一次一个地解决。 -
@shujaa ,我已对问题进行了编辑以解决您的问题。我认为这让我卡在哪里更清楚。谢谢。
标签: r ggplot2 reshape2 large-data