2017-03-09 3 views
1

Aus irgendeinem Grund, in dieser Schleife die PDFs, die es erzeugt am Ende beschädigt. Wenn ich jedoch jedes einzelne Diagramm plotte, wird es gespeichert und ich kann sie öffnen. Bitte beraten, verrückt werden!kann PDF-Plot nicht öffnen r

for (l in 1:length(which_genes)) { 
     gene_name <- which_genes[[l]] 
     cases_values <- cases[cases$HGNC == genes[gene_name],] 
     controls_values <- controls[controls$HGNC == genes[gene_name],] 
     t <- t.test(cases_values[c(2:ncol(cases_values))], controls_values[c(2:ncol(controls_values))]) 
     case <- cbind(t(cases_values[c(2:ncol(cases_values))]), "cases") 
     cont <- cbind(t(controls_values[c(2:ncol(controls_values))]), "controls") 
     dat <- as.data.frame(rbind(case, cont)) 
     names(dat) <- c("expression", "type") 
     dat$expression <- as.numeric(dat$expression) 
     #plot significant genes 
     pdf(file = paste(genes[gene_name], "_different.pdf", sep="")) 
     ggplot(dat, aes(type, expression, fill=type)) + 
     geom_boxplot() + 
     ggtitle(paste(genes[gene_name], "pvalue", t$p.value)) + 
     xlab("cases vs controls") 
     dev.off() 
} 
+0

Können Sie ein Beispiel Ihrer Daten hinzufügen? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Travis

+0

Probieren Sie Sys.sleep, um ggplot2/grid mehr Zeit zu geben, um das Diagramm zu beenden. – Roland

+0

@Roland Ich versuchte Sys.sleep (5) vor und nach der PDF, jetzt kann ich die Größe des Plots von 163bytes zu 4KB gespeichert sehen - immer noch korrupt. Wenn ich ohne die Schleife plotte, ist das PDF, das geöffnet wird, 5KB. Hast du noch andere Vorschläge? – user3324491

Antwort

1

noch ein anderer Fall der Ausfalls-to- print Fehler (wie in dem R-FAQ beschrieben). Verwenden Sie stattdessen innerhalb der Schleife:

pdf(file = paste(genes[gene_name], "_different.pdf", sep="")) 
    print(ggplot(dat, aes(type, expression, fill=type)) + 
    geom_boxplot() + 
    ggtitle(paste(genes[gene_name], "pvalue", t$p.value)) + 
    xlab("cases vs controls") 
     ) 
dev.off() 

Wenn das Ziel eine mehrseitige Ausgabe haben sollte, dann sollten Sie das PDF-Gerät außerhalb der Schleife geöffnet haben, print -ed innerhalb der Schleife und schloss dann das Gerät draußen.

Verwandte Themen