R 中什么是点前缀变量?

问题描述 投票:0回答:1

我见过一些 R 代码,其变量名称以句点开头:

.variable<-1
class(.variable) 
[1] 1
[1] "numeric"

这些变量在某种意义上似乎是“隐藏的”,因为它们不会出现在 RStudio 的全局环境中。

这些变量有什么用?领先期有什么特殊含义吗?

r
1个回答
19
投票

R
中的前缀点表示法指定了一个隐藏对象,除非您使用
ls
,否则无法直接通过
ls(all.names = TRUE)
访问该对象。这样做的目的是让
R
包的开发人员能够通过某种方式向用户隐藏其功能的实现细节,从而使他们的包更加用户友好,如 R-bloggers 上更全面地描述(并在此处简要引用)如果链接失效):

假设您正在开发函数 use_me()。如果您希望用户控制的细节实际上是 use_me() 中使用的其他函数的参数,那么您可以通过使用 ... 参数来简化您的函数。这个论点在 R 中的三点构造(Burns,2013)中得到了很好的解释。它非常有用,可以极大地简化您作为开发人员的生活。另外,它还减少了帮助页面的长度,从而使您的软件包更加用户友好。

但是,如果 use_me() 中的某些细节不是其他函数的参数,那么常见的策略是编写两个函数。一种是低级函数,带有可能导出或不导出的所有详细信息的参数。然后,您编写第二个函数,它是低级函数的包装器,并预先指定所有细节的值。请参阅下一个最小示例:

# Don't export this function
.use_me <- function(arg1, arg2, verbose = TRUE) {
    if(verbose) message(paste(Sys.time(), 'working'))
    pmax(arg1, arg2)
}

#' @export
use_me <- function(arg1, ...) {
    .use_me(arg1, 0, ...)
}

这与Python使用单下划线来防止自动从包中加载对象非常相似。在这两种情况下,实践似乎都是一种命名约定 - 除了指定用途之外(在

R
的情况下,将对象隐藏在环境中),使用该符号实际上没有任何其他结果(根据评论)至少在这篇文章,以及在我自己扫描文档之后)。

有关实际使用的示例,请参阅

colSums
trace
的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.