2012-05-15 4 views
14

Próbowałem utworzyć pakiet za pomocą niektórych funkcji i skryptów, które utworzyłem (używając X11 na Macu). Chociaż kontrola R CMD robi swoją pracę, to napotkał problem w następujący sposób:Błąd [' +' jest nierozpoznaną ucieczką w ciągu znaków rozpoczynającym się " +" podczas tworzenia pakietu R

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

najdziwniejsza rzeczą jest jednak to, że moja funkcja faktycznie NIE mają „\ +”. Zamiast tego ma "\ \ +" (patrz poniżej). Więc nie wiem, dlaczego "\ \ +" jest rozpoznawane jako "\ +".

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

Aby zagłębić się nieco dalej, zajrzałem do pliku packageName-Ex.R w folderze Rcheck. Jak się okazało, wszystkie "\ \" zostały zmienione na "\" w procesie sprawdzania (np. Podwójne ukośniki, których potrzebuję do funkcji takich jak strsplit() i grepl())

Zastanawiam się może to było przyczyną. Przepraszam, że nie mogę wymyślić odtwarzalnego przykładu ...

Odpowiedz

13

Kod naruszający prawa pochodzi z sekcji Przykłady jednego z plików pomocy (dlatego kończy się na packageName-Ex.R). Aby to naprawić, po prostu uciecz z każdego odwrotnego ukośnika w sekcji Przykłady w plikach dokumentacji *.Rd z drugim ukośnikiem odwrotnym. (Tak, typ \\ dostać \ w przetworzonego pliku pomocy, a następnie wpisz \\\\ dostać \\.)

Chyba że uciekł, \ jest interpretowany jako znak specjalny, który identyfikuje odcinki i Mark-up makra (czyli poleceń jak \author , \description, \bold i \ldots). Cytując Duncan Murdocha Parsing Rd files (oficjalny podręcznik dla tego tematu):

Odwrotny ukośnik \ służy jako znak ucieczki: \, \% {i} usunięcia specjalnego znaczenia drugi znak.

Jako przykład, jak to wygląda w praktyce, tutaj jest częścią $R_SOURCE_HOME/src/library/base/man/grep.Rd, który jest przetwarzany w celu utworzenia pliku pomóc zobaczyć po wpisaniu ?grep lub ?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) 

W przetworzonego pliku pomocy, wygląda to tak:

## 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 Dzięki. Plik pomocy był rzeczywiście problemem. Czy wiesz, dlaczego to jest problem? Stworzyłem pakiet w przeszłości i nie napotkałem podobnego problemu - nie zmieniłem żadnego z "\\" na "\\\\". – Alex

+0

@ X.He - To nie jest coś nowego, więc założę się, że twój poprzedni pakiet nie miał żadnych "\\" w twoich przykładach, ** lub **, że wszelkie przykłady były wewnątrz '\ dontrun {} 'blok, ** lub **, że nie uruchomiłeś sprawdzania R CMD. Pamiętaj, że nie ma problemu z kodem w żadnej z zapakowanych funkcji. Zamiast tego chodzi o przetwarzanie plików '* .Rd'. –

Powiązane problemy