Кто-нибудь сталкивался со следующей проблемой?
Я работаю со списком, который содержит ряд функций.Эти функции имеют некоторые комментарии, которые описывают, что они делают, и комментарии могут быть довольно длинными.Если я скопирую и вставлю свой код из моего редактора в 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
Ничего из этогокажется, влияет на фактическую функциональность самого кода;функции работают так, как задумано при вызове.Только отображение источника вызывает ошибки.