如何检查 R 中的参数 (...) 中是否定义了任何变量?
How to check if any variable is defined in argument (...) in R?
如果我有一个带有参数 (...) 的函数,并且想检查参数中是否定义了变量。我怎样才能做到这一点?我已经看过 link: How to check if object (variable) is defined in R? 提供的解决方案。但是,它并没有解决我的问题。
# Scenario 1
exists("a")
# [1] FALSE
# Scenario 2
a <- 10
exists("a")
# [1] TRUE
# Define a function for remaining scenarios
f = function(...){exists("a", inherits = F)}
# Scenario 3
f()
# [1] FALSE
# Scenario 4
a <- 10
f()
# [1] FALSE
# Scenario 5
a <- 10
f(a = 5)
# [1] FALSE
我希望方案 5 中的答案是 TRUE
。
这够吗?
# Define a function for remaining scenarios
f = function(...){"a" %in% names(list(...))}
# Scenario 3
f()
# [1] FALSE
# Scenario 4
a <- 10
f()
# [1] FALSE
# Scenario 5
f(a = 5)
# [1] FALSE
f(a = 5)
[1] TRUE
通常在将参数传递给其他函数时使用 ...
,而不是在函数本身中使用它们时。如果您想评估参数值或不评估它,它也会有所不同。如果你需要后者,那么你可以这样做
f = function(...) {
mc <- match.call(expand.dots = TRUE)
"a" %in% names(mc)
}
这将 return 对两者都成立
f(a = 4)
f(a = foo)
即使 foo
不存在。
如果我有一个带有参数 (...) 的函数,并且想检查参数中是否定义了变量。我怎样才能做到这一点?我已经看过 link: How to check if object (variable) is defined in R? 提供的解决方案。但是,它并没有解决我的问题。
# Scenario 1
exists("a")
# [1] FALSE
# Scenario 2
a <- 10
exists("a")
# [1] TRUE
# Define a function for remaining scenarios
f = function(...){exists("a", inherits = F)}
# Scenario 3
f()
# [1] FALSE
# Scenario 4
a <- 10
f()
# [1] FALSE
# Scenario 5
a <- 10
f(a = 5)
# [1] FALSE
我希望方案 5 中的答案是 TRUE
。
这够吗?
# Define a function for remaining scenarios
f = function(...){"a" %in% names(list(...))}
# Scenario 3
f()
# [1] FALSE
# Scenario 4
a <- 10
f()
# [1] FALSE
# Scenario 5
f(a = 5)
# [1] FALSE
f(a = 5)
[1] TRUE
通常在将参数传递给其他函数时使用 ...
,而不是在函数本身中使用它们时。如果您想评估参数值或不评估它,它也会有所不同。如果你需要后者,那么你可以这样做
f = function(...) {
mc <- match.call(expand.dots = TRUE)
"a" %in% names(mc)
}
这将 return 对两者都成立
f(a = 4)
f(a = foo)
即使 foo
不存在。