2012-05-15 8 views
14

Intenté crear un paquete utilizando algunas funciones y scripts que he creado (usando X11 en una Mac). Mientras cheque R CMD estaba haciendo su trabajo, se encontró con un problema de la siguiente manera:Un error [' +' es un escape no reconocido en la cadena de caracteres que comienza " +" al crear un paquete R

temp = trim(unlist(strsplit(lp.add(ranefterms[[i]]), 
+      "\+"))) 
Error: '\+' is an unrecognized escape in character string starting "\+" 

Lo más curioso, sin embargo, es que mi función en realidad no tiene una "\ +". En cambio, tiene "\ \ +" (ver abajo). Así que no sé por qué "\ \ +" se reconoce como "\ +".

for(i in 1:n) 
    temp = trim(unlist(strsplit(lp.add(ranefterms[[i]]), '\\+'))) 

Para profundizar un poco más, miré el archivo packageName-Ex.R en la carpeta Rcheck. Como resultó, todos los "\ \" han cambiado a "\" en el proceso de comprobación (por ejemplo, las barras dobles que necesito para funciones como strsplit() y grepl())

Me pregunto qué puede haber sido la causa de esto. Lo siento, no puedo encontrar un ejemplo reproducible ...

Respuesta

13

El código ofensivo proviene de la sección Ejemplos de uno de sus archivos de ayuda (por lo que termina en packageName-Ex.R). Para solucionarlo, simplemente escape cada una de las barras invertidas en las secciones de ejemplos de sus archivos de documentación *.Rd con una segunda barra inclinada invertida. (Por lo tanto, el tipo \\ llegar \ en el archivo de ayuda de procesado, y el tipo \\\\ para obtener \\.)

A menos que se escapó, \ se interpreta como un carácter especial que identifica el corte y mark-up macros (es decir, comandos como \author , \description, \bold y \ldots). Citando de Duncan Murdoch Parsing Rd files (el manual oficial para este tema):

La barra invertida \ se utiliza como un carácter de escape: \, \%, {y} eliminar el significado especial del segundo carácter.

Como un ejemplo de cómo se ve en la práctica, aquí es parte de $R_SOURCE_HOME/src/library/base/man/grep.Rd, que se procesa para crear el archivo de ayuda que se ve cuando se escribe o ?grep?gsub.

## capitalizing 
txt <- "a test of capitalizing" 
gsub("(\\\\w)(\\\\w*)", "\\\\U\\\\1\\\\L\\\\2", txt, perl=TRUE) 
gsub("\\\\b(\\\\w)", "\\\\U\\\\1",  txt, perl=TRUE) 

En el archivo de ayuda procesado, que se parece a esto:

## capitalizing 
txt <- "a test of capitalizing" 
gsub("(\\w)(\\w*)", "\\U\\1\\L\\2", txt, perl=TRUE) 
gsub("\\b(\\w)", "\\U\\1",  txt, perl=TRUE) 
+0

@ Josh-Obrien Gracias. El archivo de ayuda fue realmente el problema. ¿Sabes por qué esto es un problema? Creé un paquete en el pasado y no encontré un problema similar: no cambié ninguno de "\\" a "\\\\" s. – Alex

+0

@ X.He - Esto no es algo nuevo, así que apostaré que su paquete anterior no tenía ningún '\\' en sus ejemplos, ** o ** que los ejemplos estaban dentro de un '\ dontrun {} 'bloque, ** o ** que no ejecutó la verificación R CMD. Recuerde, este no es un problema que tiene que ver con el código en ninguna de sus funciones empaquetadas. En cambio, tiene que ver con la forma en que se procesan los archivos '* .Rd'. –

Cuestiones relacionadas