2012-05-15 7 views
14

Ich habe versucht, ein Paket mit einigen Funktionen und Skripten zu erstellen (mit X11 auf einem Mac). Während R CMD Check seine Arbeit tat, stieß es ein Problem wie folgt:Ein Fehler [' +' ist ein nicht erkanntes Escapezeichen in der Zeichenkette "+" beim Erstellen eines R-Pakets

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

Das Merkwürdigste aber ist, dass meine Funktion hat eigentlich nicht „\ +“. Stattdessen hat es "\ \ +" (siehe unten). Also ich weiß nicht warum "\ \ +" als "\ +" erkannt wird.

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

Um ein wenig weiter zu graben, schaute ich auf die Paketname-Ex.R-Datei im Rcheck-Ordner. Wie sich herausstellte, wurden alle "\" s im Prüfprozess in "\" geändert (z. B. die doppelten Schrägstriche, die ich für Funktionen wie strsplit() und grepl() benötige)

Ich frage mich was könnte die Ursache dafür gewesen sein. Entschuldigung, dass ich kein reproduzierbares Beispiel finden kann ...

Antwort

13

Der Fehlercode stammt aus dem Beispiele-Abschnitt einer Ihrer Hilfedateien (weshalb er in packageName-Ex.R endet). Um dies zu beheben, müssen Sie die umgekehrten Schrägstriche in den Beispielen der Dokumentationsdateien *.Rd mit einem zweiten umgekehrten Schrägstrich umgehen. (So, Typ \\\ in der verarbeiteten Hilfedatei zu erhalten, und gibt \\\\\\ zu erhalten.)

Es sei denn, es entgangen ist, wird \ als Sonderzeichen interpretiert, das sectioning identifiziert und Mark-up-Makros (dh Befehle wie \author , \description, \bold und \ldots). Zitiert von Duncan Murdoch Parsing Rd files (das offizielle Handbuch für dieses Thema):

Der Backslash \ wird als Escape-Zeichen verwendet: \, \%, {und} die besondere Bedeutung des zweiten Zeichens entfernen.

Als ein Beispiel dessen, was diese wie in der Praxis aussieht, hier ist ein Teil von $R_SOURCE_HOME/src/library/base/man/grep.Rd, die die Hilfedatei erstellen verarbeitet wird, sehen Sie, wenn Sie ?grep oder ?gsub eingeben.

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

In der verarbeiteten Hilfedatei, sieht es wie folgt aus:

## 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 Danke. Die Hilfe-Datei war in der Tat das Problem. Weißt du, warum das ein Problem ist? Ich habe in der Vergangenheit ein Paket erstellt und bin nicht auf ein ähnliches Problem gestoßen - ich habe nichts von "\\" zu "\\\\" geändert. – Alex

+0

@ X.He - Das ist nichts Neues, also wette ich, dass Ihr früheres Paket kein '\\' in Ihren Beispielen hatte, ** oder ** dass irgendwelche Beispiele innerhalb eines '\ dontrun waren {} 'blockieren, ** oder **, dass Sie keine R-CMD-Prüfung ausgeführt haben. Denken Sie daran, dass dies kein Problem mit dem Code in Ihren Paketfunktionen ist. Stattdessen hat es mit der Art und Weise zu tun, wie '* .Rd' Dateien verarbeitet werden. –

Verwandte Themen