在R中设置功能参数的默认值

jav*_*dba 4 r defaults

我想设置

byrow=TRUE
Run Code Online (Sandbox Code Playgroud)

作为默认行为

matrix()
Run Code Online (Sandbox Code Playgroud)

在R.中的功能有没有办法做到这一点?

Ric*_*ven 10

您可以使用formals<-替换功能.

但首先,复制matrix()到新函数是一个好主意,这样我们就不会搞乱使用它的任何其他函数,或者导致R因更改形式参数而导致的任何混淆.我在这里称之为myMatrix()

myMatrix <- matrix
formals(myMatrix)$byrow <- TRUE
## safety precaution - remove base from myMatrix() and set to global
environment(myMatrix) <- globalenv()
Run Code Online (Sandbox Code Playgroud)

现在除了参数(当然还有环境)以外myMatrix()是相同的.matrix()byrow

> myMatrix
function (data = NA, nrow = 1, ncol = 1, byrow = TRUE, dimnames = NULL) 
{
    if (is.object(data) || !is.atomic(data)) 
        data <- as.vector(data)
    .Internal(matrix(data, nrow, ncol, byrow, dimnames, missing(nrow), 
        missing(ncol)))
}
Run Code Online (Sandbox Code Playgroud)

这是一个测试运行,显示matrix()默认参数,然后myMatrix()使用默认参数.

matrix(1:6, 2)
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
myMatrix(1:6, 2)
#      [,1] [,2] [,3]
# [1,]    1    2    3
# [2,]    4    5    6
Run Code Online (Sandbox Code Playgroud)