2012-07-12 14 views
10

que tienen una función simple en una de mis paquetes R, con uno de los argumentos symbol="£":¿Cómo se usa un símbolo que no sea ASCII (por ejemplo, £) en una función de paquete R?

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

Pero cuando se ejecuta R CMD check, me sale esta advertencia:

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

Es, definitivamente, ese símbolo £ eso causa el problema Si lo reemplazo con un carácter ASCII legítimo, como $, la advertencia desaparece.

Pregunta: ¿Cómo puedo usar £ en mi argumento de función, sin incurrir en una advertencia R CMD check?

+0

Tal vez especificando el argumento de codificación, y el establecimiento ya sea latin1 o UTF-8? –

Respuesta

10

Parece que "Escribir extensiones R" cubre esto en la Sección 1.7.1 "Encoding Issues".


Una de las recomendaciones de esta página es utilizar la codificación Unicode \uxxxx. Desde £ es Unicode 00A3, puede utilizar:

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


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

Gracias. Esto es realmente útil. He editado tu respuesta para ser más específico en sus consejos. (Por si fuera poco, buscar en Google este mensaje de advertencia simplemente da como resultado listas de paquetes con esta advertencia). – Andrie

+0

Gracias por eso, estuve/estoy un poco presionado por el tiempo, así que no pude expandir ... –

+0

El problema con este enfoque es que, p. roxygen2 v6.0.1 genera archivos Rd que luego causan errores en la verificación R CMD (caracteres no ASCII). Vea mi solución a continuación. –

3

Como solución alternativa, puede utilizar la función 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

Bien, gracias por eso. –

+0

También descubrí que el paquete 'testthat' tiene problemas al ejecutar pruebas que contienen caracteres UTF-8. –

Cuestiones relacionadas