2014-04-01 63 views
1

在這裏熔融data.frame是數據幀結構我正在與工作:ggplot通過中的R

> 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」之前的數據幀列表上融化了)。具體而言,當L1 = 1或5時,子集是當設置= 1時變量=「norm.n」&。這產生了兩個直方圖,我按顏色分割。

我想要做的是設計一個生成多個圖的函數。這些圖包括: 直方圖爲每個變量(final.c中的變量)繪製「板塊」(final.c中的L1)1到板塊5-30。這將不得不按照集合進行分組,其中有2個(集合1和集合2)

因此,這會生成26個(板塊比較數量)X 80(final.c中的變量數量)= 2080地塊。我將子集的變量列表,使繪圖更易於管理,但想法應該是一樣的。

對於這個問題的緣故讓剛剛所說的變量在這個例子中,V1 ... V80

感謝您的任何和所有幫助,我會定期檢查任何可能不是很清楚。

EDIT ::

繼在評論的建議,我做了一個簡單的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值。我可以很容易地擴展這一點,使所有的板塊比較(例如(我在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 

我只是不確定有關此的語法。

+0

確切位置在哪裏,你卡住了?你有沒有嘗試在'for'循環中包裝這個過程來穿過你想要繪製的幾組印版?嘗試將你的問題分解成幾部分,並一次處理一個問題。 – Gregor

+0

@shujaa,我已添加對該問題的編輯以解決您的問題。我覺得這讓我更加清楚。謝謝。 – user2813055

回答

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,但應該是直截了當在這一點上

0

你需要嵌套你的循環。爲了便於理解,我們將使用更多的描述性名稱,而不是使用ij

此外,您應該能夠在循環之前設置一次工作目錄。並且將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) 
    } 
}