在R中为函数参数设置默认值

6

I would like to set

byrow=TRUE

作为默认行为的内容
matrix()

R中的函数。有没有什么方法可以做到这一点?


4
或者,您可以使用 mmatrix <- function(...,byrow=T) matrix(...,byrow=byrow) 来创建一个名为 mmatrix 的函数,该函数可以接受任意数量的参数,并将它们转换成矩阵。其中,byrow=T 表示生成的矩阵按行排列。 - Marat Talipov
1个回答

13

您可以使用formals<-替换函数。

但首先最好将matrix()复制到一个新函数中,以便我们不会搞乱任何其他使用它的函数,或者因更改形式参数而导致R混淆。这里我将其称为myMatrix()

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

现在,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)))
}

下面是一个测试运行,使用默认参数展示 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接