R中是否有可能保护函数名称(或通常的变量),以便它们不能被屏蔽。R中的保护函数名称
我最近发现,当创建一个名为“new”的数据框时,这可能是一个问题,该数据框掩盖了lmer使用的函数,从而使其停止工作。 (一旦知道问题出在哪里,恢复很容易,这里“rm(新)”就是这样做的。)
R中是否有可能保护函数名称(或通常的变量),以便它们不能被屏蔽。R中的保护函数名称
我最近发现,当创建一个名为“new”的数据框时,这可能是一个问题,该数据框掩盖了lmer使用的函数,从而使其停止工作。 (一旦知道问题出在哪里,恢复很容易,这里“rm(新)”就是这样做的。)
也许使用环境!这是区分名称空间的好方法。例如:
> a <- new.env()
> assign('printer', function(x) print(x), envir=a)
> get('printer', envir=a)('test!')
[1] "test!"
当然,有人可能会覆盖'a':) – geoffjentry 2010-08-11 04:31:05
@hdallazuanna建议(via Twitter)
new <- 1
lockBinding('new', globalenv())
这是有意义的,当变量是用户创建的,但不当然,防止从封装覆盖的功能。
对于您的问题有一个简单的解决方法,无需担心保护变量名称(尽管使用lockBinding
看起来确实很有趣)。如果某个功能被屏蔽,如在您的示例中,在::
运营商的帮助下,仍然可以调用屏蔽版本。
通常,语法是packagename::variablename
。
(如果你想要的功能还没有被从包中导出,那么你就需要三个冒号代替,:::
。这不应该在这种情况下,然而适用。)
如果我打电话功能不起作用,在一个依赖其他功能的套件中,无意中被掩盖了。 – AndyF 2010-08-11 14:56:19
@AndyF是的,这是一个很好的观点。我在答案中看到了一个主题:R不保护用户不受他们自己的影响。这非常类似于Linux。 ;) – 2010-08-12 14:29:17
数据帧不能覆盖的功能。您可以同时使用两者。 – James 2010-08-11 08:43:07
“覆盖”是错误的词。面具? – AndyF 2010-08-11 14:55:19
重复的http://stackoverflow.com/questions/936748/declaring-a-const-variable-in-r – hadley 2010-08-13 02:00:38