2013-10-16 9 views
8

So che puoi sfuggire caratteri speciali con "\", ma sono interessante nella creazione di comandi che andranno al terminale che includono caratteri speciali, e questi non possono leggere bene i backslash.Esiste un equivalente R di altre citazioni triple in altre lingue?

Come un esempio semplificato, mi piacerebbe avere un comando che assomiglia:

echo hello "w" or'l'd 

che potrebbero essere realizzati da qualcosa come

system(command="""echo hello "w" or'l'd""") 

Ma R non gestisce apici tripli . C'è un altro modo? Anche prendere l'output da cat() sarebbe ok. per esempio. newCommand = cat ("echo hello \" w \ "orld")

Grazie.

+0

ooh, con l'aggiunta di una sola offerta per la stringa che hai appena fatto più duro e invalidato @ risposta di flodel (che era corretto per la versione iniziale della tua domanda) ... –

+0

è più difficile di un semplice utilizzando i backslash (che come indicato di seguito non sono effettivamente inclusi internamente nella stringa, solo nella rappresentazione stampata di R di esso, e quindi probabilmente non sono così problematici come pensate che siano), ma '' deparse (sostituto ('echo hello" w " o 'l' d')) '' funziona ... –

risposta

7

si può sfuggire al " con \". Vorrei anche usare shQuote se l'intenzione è di eseguire i comandi di sistema. Si prende cura della relativa fuga per voi ...

shQuote("hello \"w\" orld" , type = "cmd") 
#[1] "\"hello \\\"w\\\" orld\"" 

È necessario essere consapevoli che ciò che si vede sullo schermo nell'interprete R non è esattamente ciò che la shell vedere .. per esempio

paste0("echo " , shQuote("hello \"w\" orld" , type = "sh")) 
#[1] "echo 'hello \"w\" orld'" 

system(paste0("echo " , shQuote("hello \"w\" orld" , type = "sh"))) 
#hello "w" orld 
+1

Penso che per usare 'shQuote' dovresti fare:' system (command = paste0 ("echo", shQuote ("ciao \" w \ "orld ", type =" cmd ")))'. Se ho capito bene, 'shQuote' è per le stringhe passate a un comando, senza un comando stesso. – juba

+0

@juba grazie, hai assolutamente ragione. Ho aggiornato in tal senso. Saluti –

3

È possibile utilizzare le virgolette singole:

system(command='echo hello "w" orld')