Ошибка ['\ +' - это непризнанный escape в символьной строке, начинающийся с \ "\" при создании пакета R

Я попытался создать пакет, используя некоторые функции и созданные мной сценарии (используя X11 на Mac). Хотя проверка R CMD выполняла свою работу, она столкнулась с проблемой следующим образом:

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

Самое странное, однако, состоит в том, что у моей функции фактически нет "\ +". Вместо этого он имеет "\\+" (см. Ниже). Поэтому я не знаю, почему "\\+" распознается как "\ +".

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

Чтобы немного разобраться, я посмотрел файл packageName-Ex.R в папке Rcheck. Как оказалось, все "\\" были заменены на "\" в процессе проверки (например, двойные косые черты, которые мне нужны для таких функций, как strsplit() и grepl())

Интересно, что могло быть причиной этого. Извините, что я не могу придумать воспроизводимый пример...

Ответы

Ответ 1

Код нарушения поступает из раздела "Примеры" одного из файлов справки (поэтому он заканчивается на packageName-Ex.R). Чтобы исправить это, просто сбегите каждую обратную косую черту в разделах Примеры ваших файлов документации *.Rd со второй обратной косой чертой. (Итак, введите \\, чтобы получить \ в обработанном файле справки, и введите \\\\, чтобы получить \\.)

Если это не удалось, \ интерпретируется как специальный символ, который идентифицирует макросы секционирования и разметки (т.е. команды типа \author, \description, \bold и \ldots). Цитата из Duncan Murdoch Разбор Rd файлов (официальное руководство по этой теме):

Обратная косая черта\используется как escape-символ: \, \%, {и} удалить особое значение второго символа.

В качестве примера того, как это выглядит на практике, вот часть $R_SOURCE_HOME/src/library/base/man/grep.Rd, которая обрабатывается для создания файла справки, который вы видите при вводе ?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)

В обработанном файле справки он выглядит следующим образом:

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