Wie konvertieren von R Formel zum text?
Ich habe Probleme beim arbeiten mit Formel als text. Was ich versuche zu tun, ist die Verkettung der Formel für den Titel des Diagramms. Jedoch, wenn ich versuche zu arbeiten, mit der Formel als text, ich nicht:
model <- lm(celkem ~ rok + mesic)
formula(model)
# celkem ~ rok + mesic
Ist dies in Ordnung. Jetzt möchte ich eine Zeichenfolge erstellen wie "my text celkem ~ rok + mesic"
- das ist wo das problem kommt:
paste("my text", formula(model))
# [1] "my text ~" "my text celkem" "my text rok + mesic"
paste("my text", as.character(formula(model)))
# [1] "my text ~" "my text celkem" "my text rok + mesic"
paste("my text", toString(formula(model)))
# [1] "my text ~, celkem, rok + mesic"
Nun sehe ich, es ist ein sprint
Funktion im Paket gtools
, aber ich denke, das ist eine so grundlegende Sache, die es verdient, eine Lösung innerhalb der Standard-Umgebung!!
sprint
ist nicht Teil dergtools
mehr. Wer weiß, was ist die Lösung zu diesem post?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Lösung aus dem Paket
formula.tools
als Funktionas.character.formula
:Reduce
könnte nützlich sein im Fall von langen Formeln:Ist, da der
width.cutoff = 60L
im?deparse
.deparse
! Dank einer million! Aber warum verwenden SieReduce
? Es ist genug zu tun, nurdeparse(frm)
.Reduce
.deparse
allein ist ausreichend für die visuelle Nutzung undReduce
+deparse
ist gar nicht so schlecht in langen Formeln für nicht visuelle Nutzung.Reduce(paste, deparse(frm))
ist ein netter trick zu ersetzenpaste(deparse(frm), collapse=' ')
Dank.Versuchen
format
:deparse
hat, abgesehen von der Breite und rechtfertigen Optionen...deparse
. Es scheint, dassdeparse(fo, cutoff.width = 200)
funktioniert, aber es gibt keinen Weg zu gehen, dass argument deparse bei der Verwendungformat
.oder als alternative zu Julius-version (Hinweis: der code wurde nicht self-contained)
Ich eine Lösung gefunden habe, aber es ist hässlich wie die Hölle...
In der Tat, das ist sooo hacky (vor allem die
c(2,1,3)
) ich betrachte das nicht als eine wirkliche Lösung... poste Bitte etwas besser 🙂Der einfachste Weg ist dieser:
getan!
Hier eine Lösung, die die Verwendung
print.formula
scheint es trick, aber den job in der oneline und vermeiden Sie die Verwendung vondeparse
und man braucht kein extra Paket. Ich habe gerade erfassen Sie die Ausgabe des print-Formel, mitcapture.output
Im Falle von long-Formel:
capture.output(print())
können nur vereinfacht werden, umdeparse()
als Julius vorgeschlagen, mit exakt dem gleichen Ergebnis:paste(deparse(frm), collapse= ' ')
...Dann hinzufügen, gsub, um Leerzeichen entfernen
Anderen
deparse
-basierte Lösung istrlang::expr_text()
(undrlang::quo_text()
):Haben Sie eine Breite argument, um Zeilenumbrüche, aber das ist begrenzt auf 500 Zeichen zu. Zumindest ist es eine einzelne Funktion, die am wahrscheinlichsten ist bereits geladen...