Ich habe eine Reihe von 2D-Datenframe-Dateien in meine R-Umgebung gelesen und möchte deren Inhalt plotten.Wie man eine x-Achse basierend auf Dateiname dynamisch annotiert
Ein Beispiel Dateiname ist:
MEF_85686672-85692745_orientation _ + _ overlap_2073_regulation_.txt
head(MEF_85686672-85692745_orientation_+_overlap_2073_regulation_.txt)
1 85686673 97.51475
2 85686674 98.51475
3 85686675 100.51475
4 85686676 44.51542
5 85686677 97.50000
der Lage sein, diese Dateien zu durchlaufen ich eine Liste dieser Dateien machen:
MEF=ls()[grep(ls(), pattern='MEF')]
Dann plotten ich den Inhalt der Dateien eins nach dem o ther
plot_files=function(MEF){
mef=get(MEF[i])
tryCatch(
plot(mef[,1], (mef[,2]/mean(mef[1:1000,2])),
main = gsub('.txt','',gsub('MEF_nuc_occupancy_region','',paste(MEF[i]))), xlab="bp",
ylab="Occupancy", type='l', ylim=c(min(mi),max(ma)), col='red'),
error=function() next);
Alle der oben genannten ist in Ordnung, es ist, wenn ich versuche, um die Funktion zu beenden, um weiter die Plots mit Anmerkungen versehen auf der Basis der Datei-Variablennamen, Probleme auftreten. Ich möchte die x-Achse hervorheben, basierend auf der Anwesenheit oder Abwesenheit eines '+' - Zeichens zwischen den regulären Mustern 'Orientierung' und 'Überlappung' in den Dateinamen.
if(substr(paste(MEF[i]), regexpr(paste(MEF[i]), pattern='_orientation_')+13, regexpr(paste(MEF[i]), pattern='_overlap_')-1)=='+'){
rect(xleft=85692000, xright=nrow(mef), ybottom=par("usr")[3], ytop=par("usr")[4], density=NA, col="lightgray")
}
}
wenn ein '+' Zeichen vorhanden ist. Die Nummer im Dateinamen, die zwischen "Überlappung" und "Regulierung" auftritt, wird genommen und von dieser Zahl (subtrahiert von der Anzahl der Zeilen) bis zum Ende der x-Achse.
und so, wenn ich diese Plot-Funktion und durchlaufen jeweils zu den Dateien:
for(i in seq(length(MEF))){
tryCatch(plot_files(MEF,ESC), error=function(e) e)
}
Das erste Problem ist, dass nichts in einem der Grundstücke hervorgehoben ... ich zuerst vermutet, dass dies auch sein mag aufgrund der Überlappungen der Bereiche zu klein, um im Kontext der gesamten x-Achse sichtbar zu sein. Allerdings sind einige der Überschneidungen recht groß und noch keiner der x-Achsen resultierenden Plots wird hervorgehoben:
Also, wenn ich versuche, es mit einer künstlichen Zahl zu debuggen (85.692.000) und versuchen, das erweitern zum rechten Ende der Achse hervorheben, wie zum Beispiel:
if(substr(paste(MEF[i]), regexpr(paste(MEF[i]), pattern='_orientation_')+13, regexpr(paste(MEF[i]), pattern='_overlap_')-1)=='+'){
rect(xleft=85692000, xright=nrow(mef), ybottom=par("usr")[3], ytop=par("usr")[4], density=NA, col="lightgray")
}
folgendes Grundstück Ergebnisse:
nur so nicht ist das Highlight vom falschen Ende der x- erstreckt Achse, aber es bedeckt auch nicht die gesamte Handlung - ich möchte nur die x-Achse mit einer Linie markieren ...(Anmerkung: Ich werde die Farbe und Dichte später aussortieren)
Alles, was ich will, ist eine grafische Darstellung der Highlights die x-Achse wie folgt:
Eines, das die x-Achse vom Ende Highlights der Achse auf die Zahl, die der Überlappung im Variablennamen entspricht, subtrahiert von der Länge der X-Achse (HINWEIS: Ich werde an dem alternativen Fall arbeiten, in dem es ein '-' und nicht '+' gibt, später - Falls die Hervorhebung von der linken Seite der Achse statt von rechts verläuft)
Verwenden Sie nicht 'assign'. Benutze stattdessen Listen und 'lapply()'. – Uwe