2016-04-22 18 views
0

Ich benutze RStudio auf dem Mac. Ich möchte einen Shell-Befehl (Terminal-Befehl) aus einer R-Skript-Datei ausführen. Ich verwende die Systemfunktion in R, um dies zu tun.Mac Shell Befehle in R mit Anführungszeichen

Um jedoch einen Schritt weiter zu gehen, habe ich einen Shell-Befehl, der eine Schleife hat und einige Parameter übergibt. Um diese Parameter zu übergeben, muss ich Anführungszeichen verwenden. Da die Systemfunktion bereits Anführungszeichen verwendet, geben diese zweiten Anführungszeichen einen Syntaxfehler. Zum Beispiel

  1. einfacher Anruf @ Terminal: mkdir ch; wenn R übersetzt wird

in Rscript

System ("mkdir ch") sein macht in Arbeitsbereich einen ch Ordner.

  1. Anrufschleife @ Terminal =

    für Datei in * .pdf; do pdftotext "$ file" "$ file.txt"; erledigt.

im Terminal der obige Befehl Schleife den Befehl 'pdftotext' für jede Datei in dem Verzeichnis. Aber wie Sie bemerken, hat dieser Aufruf bereits Anführungszeichen (Dateivariable) und Konflikte mit Anführungszeichen des Systems ("") Funktion in R

Wie kann ich diesen Shell-Befehl mit einem Schleifenaufruf in R Systemfunktion tun?

+2

Verwenden Sie einfache Anführungszeichen, d. H. '' ', Um Ihren Systemaufruf, oder fliehen Sie die doppelten Anführungszeichen mit' \\ '. – brittenb

+0

@brittenb Bitte als Antwort hinzufügen. – nrussell

Antwort

0

Das Problem ist, dass Sie R sagen, sobald Sie ein zweites doppeltes Anführungszeichen einschließen, um die Zeichenfolge zu schließen. Nehmen Sie diese Beispielzeichenfolge als ein Beispiel:

x = "I use air "quotes" like this..." 
# Error: unexpected symbol in "x = "I use air "quotes" 

Es mag die eingebetteten Anführungszeichen nicht. Aber wenn wir die doppelten Anführungszeichen mit einfachen Anführungszeichen ersetzen, unser Problem weggeht:

x = 'I use air "quotes" like this...' # or 
x = "I use air 'quotes' like this..." 

So oder so, die zwei Arten von Zitaten ignorieren im Wesentlichen einander und alles ist gut. Manchmal ist das jedoch nicht genug. Was ist, wenn Sie Zitate in eingebetteten Anführungszeichen eingebettet haben?

x = "python some_syntax.py '["Me", "You", "Him"]'" 
# Error: unexpected symbol in "x = "python some_syntax.py '["Me" 

Wir können dieses Problem beheben, indem Sie Anführungszeichen mit einem Backslash umgehen. Ich werde jedoch die Umkehrung, in der ich einfache und doppelte Anführungszeichen verwende, umkehren, um die Anzahl der erforderlichen Escape-Zeichen zu minimieren.

x = "python some_syntax.py \"['Me', 'You', 'Him']\"" 

Auch hier ist alles in Ordnung.

Hoffe, dass hilft.

+0

Danke. Es klappt :) – BKS