2012-07-12 12 views
10

Ho una funzione semplice in uno dei miei pacchetti R, con uno degli argomenti symbol="£":Come utilizzare un simbolo non ASCII (ad esempio £) in una funzione di pacchetto R?

formatPound <- function(x, digits=2, nsmall=2, symbol="£"){ 
    paste(symbol, format(x, digits=digits, nsmall=nsmall)) 
} 

Ma durante l'esecuzione R CMD check, ottengo questo avvertimento:

* checking R files for non-ASCII characters ... WARNING 
Found the following files with non-ASCII characters: 
    formatters.R 

E 'sicuramente che £ simbolo questo causa il problema Se lo sostituisco con un carattere ASCII legittimo, come $, l'avviso scompare.

Domanda: Come posso utilizzare £ nel mio argomento di funzione, senza incorrere in un avviso R CMD check?

+0

Forse specificando l'argomento di codifica, e impostando uno latin1 o UTF-8? –

risposta

10

Sembra che "Scrivere Estensioni R" lo copra nella Sezione 1.7.1 "Encoding Issues".


Una delle raccomandazioni in questa pagina è quello di utilizzare la codifica Unicode \uxxxx. Dal momento che è £ Unicode 00A3, è possibile utilizzare:

formatPound <- function(x, digits=2, nsmall=2, symbol="\u00A3"){ 
    paste(symbol, format(x, digits=digits, nsmall=nsmall)) 
} 


formatPound(123.45) 
[1] "£ 123.45" 
+0

Grazie. Questo è veramente utile. Ho modificato la tua risposta per essere più specifica nei suoi consigli. (Per inciso, googling per questo messaggio di avviso si traduce semplicemente in elenchi di pacchetti con questo avviso!). – Andrie

+0

Grazie per quello, era/sono un po 'premuto per tempo quindi non potevo espandermi ... –

+0

Il problema con questo approccio è che ad es. roxygen2 v6.0.1 genera file Rd che in seguito causano errori nel controllo R CMD (caratteri non ASCII). Vedi il mio workaround qui sotto. –

3

Per risolvere il problema, è possibile utilizzare la funzione intToUtf8():

# this causes errors (non-ASCII chars) 
f <- function(symbol = "➛") 

# this also causes errors in Rd files (non-ASCII chars) 
f <- function(symbol = "\u279B") 

# this is ok 
f <- function(symbol = intToUtf8(0x279B)) 
+0

Bello, grazie per quello. –

+0

Ho anche scoperto che il pacchetto 'testthat' ha problemi nell'esecuzione di test che contengono caratteri UTF-8. –

Problemi correlati