保护R中的函数名称

时间:2010-08-10 21:54:41

标签: r

是否可以在R中保护函数名称(或一般的变量),以便它们不会被屏蔽。

我最近发现,在创建名为“new”的数据框时,这可能是一个问题,该数据框掩盖了lmer使用的函数,从而阻止了它的工作。 (一旦你知道问题是什么,恢复很容易,这里“rm(new)”做到了。)

3 个答案:

答案 0 :(得分:7)

您的问题有一个简单的解决方法,而不必担心保护变量名称(尽管使用lockBinding看起来确实很有趣)。如果某个函数被屏蔽,就像在您的示例中一样,在::运算符的帮助下,仍然可以调用屏蔽版本。

通常,语法为packagename::variablename

(如果你想要的功能还没有从包中导出,那么你需要三个冒号,:::。但是在这种情况下这不适用。)

答案 1 :(得分:4)

也许使用环境!这是分隔名称空间的好方法。例如:

> a <- new.env()
> assign('printer', function(x) print(x), envir=a)
> get('printer', envir=a)('test!')
[1] "test!"

答案 2 :(得分:2)

@hdallazuanna建议(via Twitter)

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

当变量是用户创建时,这是有道理的,但当然不会阻止从包中覆盖函数。