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)
}