我(可能)指的不是像这里的var1~.
那样的“所有其他变量”的意思。我再次被指向plyr
,并查看了mlply
,我想知道为什么参数定义为这样的前导点:
function (.data, .fun = NULL, ..., .expand = TRUE, .progress = "none",
.parallel = FALSE)
{
if (is.matrix(.data) & !is.list(.data))
.data <- .matrix_to_df(.data)
f <- splat(.fun)
alply(.data = .data, .margins = 1, .fun = f, ..., .expand = .expand,
.progress = .progress, .parallel = .parallel)
}
<environment: namespace:plyr>
这有什么用呢?这只是个人喜好,命名惯例还是更多?通常,R是如此有效,以至于我错过了一个很久以前就已经做过的技巧。
发布于 2011-09-23 17:15:51
在名称的开头,它的工作方式类似于UNIX文件名约定,默认情况下隐藏对象。
ls()
character(0)
.a <- 1
ls()
character(0)
ls(all.names = TRUE)
[1] ".a"
它可以只是一个没有特殊含义的令牌,它不会比任何其他允许的令牌做更多的事情。
my.var <- 1
my_var <- 1
myVar <- 1
它用于S3方法分派。因此,如果我定义了简单类"myClass“并创建了具有这个类属性的对象,那么像print()这样的泛型函数将自动分派给我的特定print方法。
myvar <- 1
print(myvar)
class(myvar) <- c("myClass", class(myvar))
print.myClass <- function(x, ...) {
print(paste("a special message for myClass objects, this one has length", length(x)))
return(invisible(NULL))
}
print(myvar)
S3的语法有一个不明确的地方,因为您不能从函数的名称看出它是一个S3方法,还是名称中的一个点。但是,这是一个非常简单的机制,非常强大。
这三个方面中的每一个都有很多不同之处,您不应该将我的示例视为良好的实践,但它们是基本的区别。
发布于 2019-11-04 23:44:00
如果用户定义了一个函数.doSomething,并且懒于为参数指定所有的roxygen文档,它将不会生成用于编译包的错误
https://stackoverflow.com/questions/7526467
复制相似问题