macos - Un error[''/+'' es un escape no reconocido en la cadena de caracteres que comienza con "/+" al crear un paquete R
package x11 (1)
Intenté crear un paquete usando algunas funciones y scripts que creé (usando X11 en una Mac). Mientras que R CMD check estaba haciendo su trabajo, encontró un problema como el siguiente:
temp = trim(unlist(strsplit(lp.add(ranefterms[[i]]),
+ "/+")))
Error: ''/+'' is an unrecognized escape in character string starting "/+"
Sin embargo, lo más extraño es que mi función NO tiene "/ +". En su lugar, tiene "/ / +" (ver más 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. Al final resultó que, todos los "/ /" s se han cambiado a "/" en el proceso de comprobación (por ejemplo, las barras diagonales que necesito para funciones como strsplit () y grepl ())
Me pregunto cuál puede haber sido la causa de ello. Lo siento, no puedo dar con un ejemplo reproducible ...
El código ofensivo proviene de la sección de ejemplos de uno de sus archivos de ayuda (por lo que termina en packageName-Ex.R
). Para solucionarlo, simplemente evite cada una de las barras invertidas en las secciones de Ejemplos de sus archivos de documentación *.Rd
con una segunda barra diagonal inversa. (Entonces, escriba //
para obtener /
en el archivo de ayuda procesado, y escriba ////
para obtener //
.)
A menos que se escape, /
se interpreta como un carácter especial que identifica macros de marcado y marcado (es decir, comandos como /author
, /description
, /bold
y /ldots
). Citando los archivos de Parsing Rd de Duncan Murdoch (el manual oficial para este tema):
La barra invertida / se usa como un carácter de escape: /, /%, {y} elimina el significado especial del segundo carácter.
Como ejemplo de cómo se ve esto en la práctica, aquí está parte de $R_SOURCE_HOME/src/library/base/man/grep.Rd
, que se procesa para crear el archivo de ayuda que ve cuando escribe ?grep
o ?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, se ve así:
## capitalizing
txt <- "a test of capitalizing"
gsub("(//w)(//w*)", "//U//1//L//2", txt, perl=TRUE)
gsub("//b(//w)", "//U//1", txt, perl=TRUE)