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

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

8 голосов
/ 11 августа 2010

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

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

Ответы [ 3 ]

7 голосов
/ 11 августа 2010

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

Обычно синтаксис packagename::variablename.

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

4 голосов
/ 11 августа 2010

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

> a <- new.env()
> assign('printer', function(x) print(x), envir=a)
> get('printer', envir=a)('test!')
[1] "test!"
2 голосов
/ 11 августа 2010

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

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

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

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