【问题标题】:Protecting function names in R在 R 中保护函数名称
【发布时间】:2011-03-28 02:17:25
【问题描述】:

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

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

【问题讨论】:

标签: r


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    @hdallazuanna 推荐(via Twitter)

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

    当变量是用户创建的,但当然不能防止覆盖包中的函数时,这是有意义的。

    【讨论】:

      【解决方案3】:

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

      一般来说,语法是packagename::variablename

      (如果你想要的函数没有从包中导出,那么你需要三个冒号,:::。但是这不应该适用于这种情况。)

      【讨论】:

      • 如果我在一个包中调用一个函数,该函数依赖于其他地方的一个函数,而该函数在不经意间被屏蔽了,则该函数不起作用。
      • @AndyF 是的,这是一个好点。我在答案中看到了一个主题:R 不会保护用户免受自己的伤害。这非常类似于 Linux。 ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多