Защита имен функций в R

Можно ли в R защитить имена функций (или переменные в целом), чтобы они не могли быть замаскированы.

Я недавно заметил, что это может быть проблемой при создании фрейма данных с именем «новый», который маскирует функцию, используемую lmer, и, таким образом, останавливает ее работу. (Восстановление легко, если вы знаете, в чем проблема, здесь это сделал "rm (new)".)

8
задан AndyF 24 December 2011 в 16:47
поделиться

3 ответа

Существует простой способ решения вашей проблемы, не беспокоясь о защите имен переменных (хотя игра с lockBinding выглядит забавно). Если функция становится замаскированной, как в вашем примере, все еще можно вызвать замаскированную версию с помощью оператора :: .

Обычно используется синтаксис имя_пакета :: имя_переменной .

(Если нужная функция не была экспортирована из пакета, вместо этого вам понадобятся три двоеточия, ::: . Однако в данном случае это не применимо.)

7
ответ дан 5 December 2019 в 12:54
поделиться

@hdallazuanna рекомендует (через Twitter)

new <- 1
lockBinding('new', globalenv())

это имеет смысл, когда переменная создается пользователем, но, конечно, не предотвращает перезапись функции из пакета.

2
ответ дан 5 December 2019 в 12:54
поделиться

Может быть, использовать среды! Это отличный способ разделить пространства имен. Например:

> a <- new.env()
> assign('printer', function(x) print(x), envir=a)
> get('printer', envir=a)('test!')
[1] "test!"
4
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: