是否可以在R中保护函数名称(或一般的变量),以便它们不会被屏蔽。
我最近发现,在创建名为“new”的数据框时,这可能是一个问题,该数据框掩盖了lmer使用的函数,从而阻止了它的工作。 (一旦你知道问题是什么,恢复很容易,这里“rm(new)”做到了。)
答案 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())
当变量是用户创建时,这是有道理的,但当然不会阻止从包中覆盖函数。