R 如果函数不返回值';不存在于函数中

R 如果函数不返回值';不存在于函数中,r,function,environment,R,Function,Environment,我正在写一个包含一些条件的函数。函数的返回值将取决于这样的条件,返回值可能甚至不存在于基于该条件的函数中。在这种情况下,我希望函数抛出一个错误。但是,这仅在假定的返回值不存在于全局环境中时有效。如果返回,则返回全局环境中的值,这让我感到困惑 我错过了什么?我做错了什么 示例: xyz <- function(x = NULL, y = NULL) { if (x+y > 10) {z <- x + y} return(z) } xyz 10){z如果函数中的自由变量

我正在写一个包含一些条件的函数。函数的返回值将取决于这样的条件,返回值可能甚至不存在于基于该条件的函数中。在这种情况下,我希望函数抛出一个错误。但是,这仅在假定的返回值不存在于全局环境中时有效。如果返回,则返回全局环境中的值,这让我感到困惑

我错过了什么?我做错了什么

示例:

xyz <- function(x = NULL, y = NULL)
{
  if (x+y > 10) {z <- x + y}

  return(z)
}
xyz 10){z如果函数中的自由变量(已引用但未定义)被访问,则它会在定义该函数的环境中查找,然后在该函数的父环境中查找,依此类推

使用
get(“z”,inherits=FALSE)
仅在当前环境中查找
z
,或检查它是否存在
仅在当前环境中存在(“z”,inherits=FALSE)

另一种可能是总是给
z
一个值:

z <- if (length(x) && length(y) && x + y > 10) x + y
为什么不根据条件而不是
z
抛出一个信息性错误呢

xyz <- function(x = NULL, y = NULL)
{
    if ( x + y <= 10 ) {
        stop("The sum of x and y must be greater than 10.")
    }
    return(x + y)
}

xyz(20, 30)
# [1] 50
xyz(2, 3)
# Error in xyz(2, 3) : The sum of x and y must be greater than 10.

xyz我喜欢duckmayr的想法,但下面是如何在仍然使用
z
的情况下实现:

xyz <- function(x = NULL, y = NULL) {
    z = x + y
    if (z <= 10 ) {
        stop("The sum of x and y must be greater than 10.")
    }
    return(z)
}

xyz我也喜欢这个,因为它避免了两次求和。这并不重要,因为这显然是针对标量的,但是……谢谢……我可能应该对你的答案发表评论。如果你想编辑,我会删除这个。但是是的。如果
z
的计算非常简单,这会更干净。
xyz <- function(x = NULL, y = NULL)
{
    if ( x + y <= 10 ) {
        stop("The sum of x and y must be greater than 10.")
    }
    return(x + y)
}

xyz(20, 30)
# [1] 50
xyz(2, 3)
# Error in xyz(2, 3) : The sum of x and y must be greater than 10.
xyz <- function(x = NULL, y = NULL) {
    z = x + y
    if (z <= 10 ) {
        stop("The sum of x and y must be greater than 10.")
    }
    return(z)
}