【问题标题】:How to check if any variable is defined in argument (...) in R?如何检查R的参数(...)中是否定义了任何变量?
【发布时间】:2021-08-26 16:38:06
【问题描述】:

如果我有一个带有参数 (...) 的函数,并且想要检查参数中是否定义了变量。我怎样才能做到这一点?我已经查看了此链接提供的解决方案: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

【问题讨论】:

    标签: r function arguments exists


    【解决方案1】:

    这就够了吗?

    # 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
    

    【讨论】:

    • 是的。这会有所帮助。谢谢!
    【解决方案2】:

    通常在将参数传递给其他函数时使用...,而不是在函数本身中使用它们时。如果您想评估参数值或不评估它,它也会有所不同。如果你需要后者,那么你可以做类似的事情

    f = function(...) {
      mc <- match.call(expand.dots = TRUE)
      "a" %in% names(mc)
    }
    

    这将对两者都返回 true

    f(a = 4)
    f(a = foo)
    

    即使foo 不存在。

    【讨论】:

    • 好的。知道了。只是我的意图是分两步:1)根据...中定义的参数选择函数。 2) 将参数传递给函数。
    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 2010-09-22
    • 2012-03-11
    • 1970-01-01
    • 2012-10-07
    • 2021-04-21
    • 2015-05-01
    相关资源
    最近更新 更多