R-Profis hier?

cyberjonny

Active member
Themenstarter
Registriert
22 Sep. 2007
Beiträge
9.770
Hi,

sind hier Profis in der Programmiersprache bzw. Statistiksoftware R unterwegs?

Ich versuche gerade, ein Script zu basteln, das anhand von Daten aus einer Tabelle entsprechende Boxplots generiert - und scheitere bisher noch kläglich... :rolleyes: :(

Also falls sich jemand (gut) damit auskennt, würde ich mich freuen, wenn er/sie mir etwas Hilfestellung leisten könnte. Dann gerne einfach hier im Thread oder per PN melden.

Danke und Gruß,
Jonny
 
Ich würde gerne nochmal auf das manuelle Ersetzen der x-Achsenbeschriftung zurückkommen. Das funktioniert leider irgendwie doch noch nicht.

Also, mit folgendem Code werden die Boxplots inkl. automatischer x-Achsenbeschriftung generiert:
Code:
mytable <- read.table("Pfad-zur-Tabelle", sep="\t", header=TRUE, fileEncoding="UTF-8")
mytable$labels <- factor(mytable$labels, levels=c("A", "B", "C", "D"), ordered=TRUE)
boxplot(mytable$s1 ~ mytable$labels, ylim=c(100, 0))

Wenn ich die letzte Codezeile um den Parameter xaxt="n" ergänze, dann wird die (automatische) x-Achsenbeschriftung wie gewünscht unterdrückt:
Code:
mytable <- read.table("Pfad-zur-Tabelle", sep="\t", header=TRUE, fileEncoding="UTF-8")
mytable$labels <- factor(mytable$labels, levels=c("A", "B", "C", "D"), ordered=TRUE)
boxplot(mytable$s1 ~ mytable$labels, ylim=c(100, 0), xaxt="n")
Soweit - so gut!
Nun habe den Code um eine Zeile ergänzt, mit der ich die x-Achsenbeschriftung wieder manuell hinzufügen wollte:
Code:
mytable <- read.table("Pfad-zur-Tabelle", sep="\t", header=TRUE, fileEncoding="UTF-8")
mytable$labels <- factor(mytable$labels, levels=c("A", "B", "C", "D"), ordered=TRUE)
boxplot(mytable$s1 ~ mytable$labels, ylim=c(100, 0), xaxt="n")
axis(1, at=mytable$labels, labels=paste("A1", "B1", "C1", "D1"))
Das funktioniert allerdings leider nicht. Die x-Achse bleibt unbeschriftet und es erscheint die Fehlermeldung:
Error in axis(1, at = mytable$labels, labels = paste("A1", "B1", "C1", :
Länge von 'at' und 'labels' unterschiedlich, 345 != 1

Was geht hier schief? :confused:
 
Hej, sorry, bin gerade erst nach Hause gekommen. du musst at=mytable$labels durch at=boxplot$names ersetzen und um das zu können, vorher dem eigentlichen boxplot einen namen zuweisen:

Code:
mytable <- read.table("Pfad-zur-Tabelle", sep="\t", header=TRUE, fileEncoding="UTF-8")
mytable$labels <- factor(mytable$labels, levels=c("A", "B", "C", "D"), ordered=TRUE)
myboxplot <- boxplot(mytable$s1 ~ mytable$labels, ylim=c(100, 0), xaxt="n")
axis(2, at=myboxplot$names, labels=c("A1", "B1", "C1", "D1"))

Wenn du nicht die Samplezahl dazu willst, dann brauchst du auch die paste-Funktion nicht, sondern einfach einen Vektor. Das paste ermöglicht nur die Zusammenführung mehrerer Strings. ;)
 
Danke! :thumbup:

Und jetzt würde ich das Ganze gerne noch automatisieren. :)
In mehreren Unterverzeichnissen eines Verzeichnisses liegen viele Dateien, die alle die gleiche Endung .tab haben und alle auf diese Weise verarbeitet werden sollen. Jede tab-Datei hat einen individuellen Namen, der dann bestenfalls auch an die von R zu generierende Bild- bzw. PDF-Datei so übergeben wird. Am coolsten wäre es, wenn in jedem Unterverzeichnis automatisiert zu jeder Tabellen-Datei "Datei-1234567.tab" eine PNG-Datei "Datei-1234567.png" und eine PDF-Datei "Datei-1234567.pdf" generiert werden könnte...

Keine Ahnung, wie schwierig oder einfach das ist?
 
Sagen wir's mal so, das ist relativ einfach möglich, aber ein wenig Fleißarbeit und testen und lässt sich wirklich nicht aus der Luft ohne zumindest Pseudodaten erklären. Ich habe genau das Gleiche bzw. Ähnliche (hunderte CSVs in einem Ordner) für meine Sachen gemacht.
Sind die Unterverzeichnisse denn einzugrenzen, oder müssen die alle nach den .tabs durchsucht werden und gibt es da auch andere .tab-Dateien, die nicht mitgenommen werden sollen? Also ich kann dir da helfen, aber jetzt nicht unter der Woche, evtl. am Wochenende, wenn ich mal Pause von meinem Manuskript machen muss, will aber nichts versprechen. :huh:

Aber ein Tipp, der auf keinen Fall schadet: Für die automatisierte Auswertung bzw. Verarbeitung durch R, sollten deine entsprechenden Dateinamen keine Sonderzeichen, Umlaute, Bindestriche o.Ä. enthalten, also nur alphanumerische Zeichen und als Trenner einen Unterstrich. Falls das so sein sollte habe ich zumindest für Windows ein nettes Tool zum Umbenennen von Dateien, das auch Pre-/Suffixe vergeben und mit regulären Ausdrücken umgehen kann. damit lassen sich ziemlich schnell Ordnerweise Dateien passend umbenennen: http://www.bulkrenameutility.co.uk/Main_Intro.php

EDIT: Noch ein Tipp, wenn du Auswertungen in R automatisieren willst: Falls du sie nicht schon anderweitig gelernt hast, schau dir mal die Perl-Syntax für reguläre Ausdrücke an, die brauchst du da dann nämlich auf jeden Fall.
 
Zuletzt bearbeitet:
Bis zum Wochenende kann ich damit leider nicht warten, aber dann muss ich es eben von Hand machen. Ist bei über 100 Dateien eben Fleißarbeit, die ich mir gerne erspart hätte. :)
Aber du hast ohnehin schon sehr geholfen, Turambar!! :thumbup:

Alle Unterverzeichnisse müssen nach .tabs durchsucht werden (es muss kein Unterverzeichnis ausgeschlossen werden) und das Script kann, darf und soll auf alle .tabs in diesen Unterverzeichnissen angewendet werden. Die Dateinamen bestehen aus Buchstaben, Zahlen, Unterstrich und Bindestrich (Bindestriche sind tatsächlich problamtisch? Die habe ich extre genommen, weil ich dachte, sie sind es nicht :D)...
 
Ja die Bindestriche werden, sobald die Filelist erstellt wurde als mathematische Operatoren gewertet, da die Dateinamen in R-Objekt-Bezeichnungen umgewandelt werden (zumindest bei mir).

Im Endeffekt ist der Ablauf so, dass du alle Tabellen-Dateien mit bestimmten Namensmerkmalen einliest und dann in R die Liste dieser Objekte hast und die iterativ abarbeitest und sie dabei mit ihrem Dateinamen ansprichst.
Und da entsteht dann halt das Problem: Wenn du das R-Objekt ABC-12345 hast, dann muss R es im weiteren Verlauf abrufen, um die Auswertungen zu machen, d.h. es wird nicht als String angesprochen, sondern als Variable (heißt wahrscheinlich anders, aber ich denke die Bedeutung ist klar); dabei wird dann aus dem ABC-12345 die mathematische Operation Datenobjekt ABC minus Datenobjekt 12345. Man kann das natürlich in dem Loop beim Einlesen ersetzen, aber einfacher ist es sich generell Sonderzeichen außer dem Unterstrich in Dateinamen zum Weiterverarbeiten abzugewöhnen und es spart Codezeilen. Das wird dann nämlich schnell unübersichtlich wenn im Auswertungsskript überall noch Transformationen und Ersetzungen drinne stecken.

EDIT: EDIT gelöscht, wäre zuviel Arbeit die Benennungen zu ändern.
 
Zuletzt bearbeitet:
Alles klar, dann weiß ich für die Zukunft Bescheid, danke!

- - - Beitrag zusammengeführt - - -

Noch eine (vermutlich einfachere) Frage: Wie kann ich denn die y-Achse samt Skala umdrehen?
 
das sollte gehen, indem du die y-Achse mit yaxp=c(100, 0, n) festlegst, dabei ist der erste Wert das untere Limit und der zweite das obere, n gibt die Anzahl der Tickmarks vor.
 
  • ok1.de
  • IT Refresh - IT Teile & mehr
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben