2012-11-19 8 views
5

Sto avendo un problema con l'utilizzo virgolette durante la formattazione delle stringhe di testo di essere inviato a funzioni in R.Invia una stringa di testo che contiene le virgolette doppie a funzionare

Si consideri un esempio di codice funzione:

foo <- function(numarg = 5, textarg = "** Default text **"){ 
    print (textarg) 
    val <- numarg^2 + numarg 
    return(val) 
} 

quando si esegue con la seguente digitazione:

foo(4, "Learning R is fun!") 

il risultato è:

[1] "Learning R is fun!" 
[1] 20 

Ma quando provo (in vari modi, come suggerito here) di scrivere "R" al posto di R, ottengo le seguenti uscite:

> foo(4, "Learning R is fun!") 
[1] "Learning R is fun!" 
[1] 20 
> foo(4, "Learning "R" is fun!") 
Error: unexpected symbol in "funfun(4, "Learning "R" 
> foo(4, "Learning \"R\" is fun!") 
[1] "Learning \"R\" is fun!" 
[1] 20 
> foo(4, 'Learning "R" is fun!') 
[1] "Learning \"R\" is fun!" 
[1] 20 

Uso as.character(...) o dQuote(...) come suggerito here sembra rompere il funzione a causa del diverso numero di argomenti.

risposta

1

si può provare questi approcci:

foo <- function(numarg = 5, textarg = "** Default text **"){ 
    cat(c(textarg, "\n")) 
    val <- (numarg^2) + numarg 
    return(val) 
} 

foo <- function(numarg = 5, textarg = "** Default text **"){ 
    print(noquote(textarg)) 
    val <- (numarg^2) + numarg 
    return(val) 
} 

foo(4, "Learning R is fun!") 
foo(4, 'Learning "R" is fun!') 
+0

Grazie! Entrambi funzionano! Ho notato che posso usare solo 'cat (textarg," \ n ")' invece di formattare l'output come array usando 'cat (c (textarg," \ n ")'. Quale è il preferito? – Khaloymes

5

Due modi che conosco. In primo luogo è usare solo le virgolette singole per iniziare e terminare la stringa di caratteri:

> cat('Learning "R" is fun!') 
Learning "R" is fun! 

secondo è quello di sfuggire alle virgolette:

> cat("Learning \"R\" is fun!") 
Learning "R" is fun! 

Nota che questo funziona perché io uso cat, che è destinato a trasmette le stringhe alla console. Sembra che si utilizza print() che mostra l'oggetto piuttosto che di output è

+2

Quando provo ad usare 'cat' durante l'invio di testo per la funzione, il testo viene formattato correttamente (usando qualsiasi dei tuoi suggerimenti), solo che questa volta, genera 'Learning" R "è divertente! NULL' invece di' Learning "R" è divertente! '. Qualche idea su come terminare quell'aggiunta 'NULL'? (E ancora più importante, qualche idea da dove proviene?) – Khaloymes

Problemi correlati