Ошибка Srcref со списком функций и встроенными комментариями - PullRequest
3 голосов
/ 12 декабря 2011

Кто-нибудь сталкивался со следующей проблемой?

Я работаю со списком, который содержит ряд функций.Эти функции имеют некоторые комментарии, которые описывают, что они делают, и комментарии могут быть довольно длинными.Если я скопирую и вставлю свой код из моего редактора в R, а комментарии получат слишком long, R (версия 2.14, 32-разрядная, для Windows) это не понравится.

Вот простой (если длинный) пример.lf содержит 3 элемента, каждый из которых является функцией.Каждой функции предшествует большой блок комментариев.

lf <- list(
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
    f1 = function(x)
    x,

#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
    f2 = function(x)
    x,

#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
#00000000000000000000000000000000000000000
    f3 = function(x)
    x
)

Когда я копирую и вставляю этот код в R, а затем пытаюсь отобразить определенную функцию, я получаю сообщение об ошибке:

> lf$f3
Error in `Encoding<-`(`*tmp*`, value = enc) : 
  'value' must be of positive length

Однако ошибка не появляется в R 2.12.2 (32-разрядная версия, Windows):

> lf$f3
function(x)
    x

Ошибка также исчезает в 2.14, если я сохраняю свой код и затем source его в моем Rсеанс, или если я удаляю большие блоки комментариев.Последнее может быть достигнуто либо удалением их из моего кода, а затем копированием и вставкой, либо прямым установлением атрибута srcref на NULL для нарушающих функций.

lf2 <- list(
    f1 = function(x)
    x,
    f2 = function(x)
    x,
    f3 = function(x)
    x
)

lf3 <- lapply(lf, function(x) { attr(x, "srcref") <- NULL; x })


> lf2$f3
function(x)
    x

> lf3$f3
function (x) 
x

Ничего из этогокажется, влияет на фактическую функциональность самого кода;функции работают так, как задумано при вызове.Только отображение источника вызывает ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...