R: erstellen von Vektoren des lateinischen/griechischen Ausdruck für plot-Titel, Achsenbeschriftungen oder Legenden
Ich würde gerne Zusammenführen von Vektoren des lateinischen und griechischen text zu generieren plot-Titel, Achsenbeschriftungen, Legende-Einträge, etc. Ich habe ein triviales Beispiel unten. Ich kann nicht herausfinden, wie machen die griechischen Buchstaben in Ihrer ursprünglichen form. Ich habe versucht, verschiedene Kombinationen von expression
, parse
, und apply
zu den paste
Befehl, aber ich habe nicht in der Lage zu Vektorisieren Sie den code direkt erzeugt, gemischt Lateinisch/griechischen text für den Fall von einem einzigen Ausdruck (z.B. expression("A ("*alpha*")")
geeignet ist, im Fall von einem einzigen-Ausdruck).
data<-matrix(seq(20),nrow=5,ncol=4,byrow=TRUE)
colnames(data)<-c("A","B","C","D")
greek<-c(" (alpha)"," (beta)"," (gamma)"," (delta)")
matplot(data)
legend(1,max(data),fill=c("black","red","green","blue"),apply(matrix(paste(colnames(data),greek,sep=""),nrow=4,ncol=1),1,expression))
Könnten Sie mir bitte helfen mit der apply()
- Anweisung innerhalb der legend()
Aussage? Es erfordert einige änderungen, um die gewünschte Ausgabe (d.h., A (α), B(β), C(γ), D(δ)). Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine alternative, die verhindert, dass
parse()
und arbeitet mit dem Beispiel erwähnt in Ihrem ersten Kommentar an @mnel ' s nette Antwort:A (B)
,A*B
, undA~B
Arbeit in dersubstitute
- Anweisung, in der Erwägung, dassA B
nicht? Könnte dir auch einen Kommentar für den neuen Benutzer, warum dieas.
syntax ist erforderlich? Ich habe gelesen, dasssubstitute
gibt eine ungewichtete Ausdruck, so fungiert auf der Ausgabe vonsubstitute
mitas.expression
Sinn macht. Wasas.name
?substitute()
nehmen kann als erstes argument jedes syntaktisch gültige Anweisung.A B
ist nicht "erlaubt", weil es syntaktisch gültig ist. (Können Sie denken, dass jeder R-Anweisung eingegeben auf der Befehlszeile wurde, die form? Ich dachte nicht!).?substitute
, und spielen, um mitclass(substitute())
zu sehen, was ich meine:class(substitute(x)); class(substitute(x(y))); class(substitute({x; y})); class(substitute(expression(x)))
etc.) Ich benutzeas.expression()
zu zwingen, was gibt es einen Ausdruck Objekt. Ausdrücke sind eine Art von Vektor, sosapply()
einfach verkettet die mehrere Länge-1-Ausdrücken zu einer einzigen Länge-4 expression vector. Sehen?as.name
kennen zu lernenas.name()
. Hoffe, das hilft!Nicht verwenden
apply
einen Vektor erstellen von Ausdrücken.Stattdessen
parse(text = ...)
.Wenn
~
innerhalb der Ausdrücke. Angesichts Ihrer aktuellen workflow, so scheint es am einfachsten zu ersetzensep = ''
mitsep = '~'
im Aufrufpaste
Es könnte sogar sein, klarer zu verwenden
sprintf
bilden die Zeichenketten, die zu Ihrem Ausdruck ein Vektor.Wenn Sie möchten, enthalten Zeichenketten, die Leerzeichen enthalten, müssen Sie wickeln Sie diese Zeichenfolgen in Anführungszeichen in der Zeichenfolge. Zum Beispiel.
~
Zeichen? Zum Beispiel, die Neudefinitioncolnames(data)
zuc("A~a","B~b","C~c","D~d")
akzeptabel ist, während die Neudefinition zuc("A a","B b","C c","D d")
ist nicht (diese definition gibt einenunexpected symbol
Fehler beim ausführen derparse
- Anweisung). Vielleicht, wenn ich nicht will das tilde-Zeichen in der Spalte Namen, sollte ich die Verwendung eines string-substitution-Funktion ersetzt alle Leerzeichen mit Tilden vor derparse
Aussage?colnames
(z.B., "Eine" statt "Ein"). Jedoch, dieparse
- Anweisung schlägt fehl, wenncolnames
ein Leerzeichen enthält. Wenn der Platz ersetzt mit einer tilde (z.B., "A~a" statt "A"), dannparse
- Anweisung schlägt nicht mehr fehl. Mit~
alssep
impaste
funktioniert immer noch nicht für einecolname
mit einem Raum wie Ein "a".matrix
oderdata.frame
. Ich denke, dass meinemapply(sprintf,...)
Lösung wäre am einfachsten zu implementieren, diese mit.greek
zuc("", "beta", "gamma", "delta")
bewirkt, dass der code wieder zu Versagen. Wissen Sie, wie Sie dieses Problem lösen?gsub(x= .expressions,'~\\(\\)', '')