没有默认值的R函数值被忽略

P B*_*ock 5 r function

我们有一个函数需要多个参数,没有任何默认值.但是,即使未指定其中某些参数,该函数也会返回一个值,如果这些参数仅用于子集矩阵(可能还有其他类型).我们很困惑为什么会这样 - 有人可以帮忙吗?

具体来说,为什么以下代码不返回错误,而是对整个矩阵求和并忽略j:

foo <- function(mat, j){
  v <- sum(mat[,j])
  v
}

foo(mat = matrix(1:4,3,4))
Run Code Online (Sandbox Code Playgroud)

Ern*_*t A 2

我的猜测是这个论点从未被评估过。

foo <- function(x)
    bar(x)

bar <- function(y)
    missing(y)

foo()
#[1] TRUE
foo(43)
#[1] FALSE
Run Code Online (Sandbox Code Playgroud)

在你的例子中,内部函数[有正式的参数i, j, ..., drop = FALSE,很可能会检查参数是否j丢失,如果丢失,它不会尝试评估它。

  • 不,当 R 计算“j”并且在当前或父环境中找不到“j”时,它会引发错误。在这种情况下,没有错误,因为没有评估“j”。在 R 中,当(如果)需要参数时,参数会在函数环境中求值,而一些特殊函数(如“missing()”)根本不求值它们的参数。 (2认同)