检查缺少哪些函数参数/ NULL

时间:2016-02-07 21:44:42

标签: r function arguments parameter-passing default

我实际上有两个问题,这两个问题都是由于缺乏理解R函数中的参数如何处理而产生的。

  1. 我想得到一个向量,指示函数f(x,y)的哪些参数实际上缺失。是否有比以下解决方案更优雅的方式:

    f <- function(x, y) {
      c(missing(x), missing(y))
    }
    
  2. 我还实现了一个函数,它返回一个逻辑变量,指示参数是否为NULL

    g <- function(x, y) {
      args_names <- as.list(environment())
      sapply(args_names, is.null)
    }
    

    虽然这个函数按预期工作,但我很难理解为什么g(y=1)没有为第一个参数返回TRUE

    > g(y=1)
        x     y 
    FALSE FALSE 
    

2 个答案:

答案 0 :(得分:2)

  1. 这似乎是一件合理的事情。当然,如果你有更多的论点,你可以考虑sapply

  2. 对于你的第二个问题,为什么不直接返回args并查看

    R> g <- function(x, y) {
    +    as.list(environment())
    + }
    R> args = g(10)
    R> str(args$y)
     symbol
    

    当然,接下来的问题是什么是符号,取自manual of all knowledge

  3.   

    符号是指R对象。任何R对象的名称通常是a   符号。可以通过函数as.name和。创建符号   引用。符号具有模式“名称”,存储模式“符号”和类型   “符号”。它们可以使用强制进出字符串   as.character和as.name。它们自然地表现为解析的原子   表达式,尝试例如as.list(quote(x + y))。

答案 1 :(得分:2)

使用sapply,你可以这样做(希望没有太多的小猫被杀死:

f1 <- function(x,y) {
  sapply(names(formals()), function(arg) {
    eval.parent(call('missing', as.name(arg)), n=3)
  })
}