Ich möchte eine Zeile in einem R-Skript auf mehrere Zeilen aufteilen (weil sie zu lang ist). Wie mache ich das?
Insbesondere habe ich eine Zeile wie
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
Ist es möglich, den langen Pfad auf mehrere Zeilen aufzuteilen? Ich habe es versucht
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
mit return
Schlüssel am Ende der ersten Zeile; aber das funktioniert nicht.
Vielen Dank.
paste0
existierte noch nicht, als ich die Antwort vor 2+ Jahren schrieb.Bah, Kommentare sind zu klein. Wie auch immer, @Dirk ist sehr richtig.
R muss nicht mitgeteilt werden, dass der Code in der nächsten Zeile beginnt. Es ist schlauer als Python ;-) und liest einfach die nächste Zeile weiter, wenn es die Aussage als "nicht fertig" betrachtet. In Ihrem Fall ging es tatsächlich auch in die nächste Zeile, aber R nimmt die Rückgabe als Zeichen, wenn sie zwischen "" steht.
Wohlgemerkt, Sie müssen sicherstellen, dass Ihr Code nicht fertig ist. Vergleichen Sie
mit
Wenn Sie also Code über mehrere Zeilen verteilen, müssen Sie sicherstellen, dass R weiß, dass etwas kommt, entweder durch:
Wenn wir über Strings sprechen, funktioniert dies immer noch, aber Sie müssen etwas vorsichtig sein. Sie können die Anführungszeichen öffnen und R liest weiter, bis Sie es schließen. Aber jedes Zeichen, einschließlich der Newline, wird als Teil der Zeichenfolge angesehen:
Aus diesem Grund hat Ihr Code in diesem Fall nicht funktioniert: Ein Pfad darf kein Zeilenumbruchzeichen (
\n
) enthalten. Deshalb sollten Sie die Lösung auch besser mitpaste()
oder vonpaste0()
Dirk vorgeschlagen verwenden.quelle
paste("~one",\n"/two")
nur zu brauchen("~one" \n "/two")
. Lassen Sie die Kommas und diepaste
. Ich sehe nicht nach Sprache aus. Ich benutze beide Sprachen, habe aber immer gedacht, dass Paste ein Ärgernis war.("one"\n "/one.one" # some comment\n "/two")'
Beispiele in stackoverflow.com/questions/10660435/…leaving a bracket open, or ending the line with an operator
Diese beiden sind der richtige Weg.Die obige Methode von Dirk wird absolut funktionieren, aber wenn Sie nach einer Möglichkeit suchen, eine lange Zeichenfolge einzufügen, bei der Leerzeichen / Strukturen wichtig sind (Beispiel: eine SQL-Abfrage mit RODBC), gibt es eine zweistufige Lösung.
1) Bringen Sie die Textzeichenfolge über mehrere Zeilen
2) R führt eine Reihe von
\n
Zeichen ein. Entfernen Sie diese mitstrwrap()
, was Leerzeichen zerstört, gemäß der Dokumentation :Wenn Sie strwrap anweisen, Ihren Text in eine sehr, sehr lange Zeile zu setzen, erhalten Sie einen einzelnen Zeichenvektor ohne Leerzeichen / Zeilenumbrüche.
quelle
strwrap
Vektor mehrerer Zeichenfolgen möglicherweise zurückgegeben wird, auch wenn die Quellzeichenfolge nicht länger als 10.000 Zeichen ist. Versuchen Sie esstrwrap("a\n\nb")
. Es wird ein Vektor der Länge 3 zurückgegeben, und Sie müssen ihnpaste(strwrap("a\n\nb"), collapse=" ")
mit einem Leerzeichen-Kleber wieder einfügen, um den Vektor zu reduzieren.Für diesen speziellen Fall gibt es
file.path
:quelle
Ich weiß, dass dieser Beitrag alt ist, aber ich hatte eine solche Situation und möchte nur meine Lösung teilen. Alle obigen Antworten funktionieren einwandfrei. Wenn Sie jedoch einen Code wie den in data.table verketteten Syntax haben, wird dies zu einer Herausforderung. zB hatte ich so ein Problem.
mass <- files[, Veg:=tstrsplit(files$file, "/")[1:4][[1]]][, Rain:=tstrsplit(files$file, "/")[1:4][[2]]][, Roughness:=tstrsplit(files$file, "/")[1:4][[3]]][, Geom:=tstrsplit(files$file, "/")[1:4][[4]]][
mal]<=12000]
Ich habe die meisten der oben genannten Vorschläge ausprobiert und sie haben nicht funktioniert. aber ich habe herausgefunden, dass sie nach dem Komma innerhalb geteilt werden können
[]
. Splitting bei][
nicht funktioniert.quelle