【问题标题】:All valid values of an argument of a function in RR中函数参数的所有有效值
【发布时间】:2013-12-19 14:38:22
【问题描述】:

假设我们有一个 R 函数,它的参数必须从有限的元素集中选择。喜欢qplot(..., geom="")。而geom 只能取一些值,例如barpoint

如何找出给定函数的参数可能采用的所有有效值?除了经常错过所有可能值的文档或 Internet 之外。也许,一些 R 函数可以提供帮助?

【问题讨论】:

  • 这通常是不可能的,因为有效性通常由相关函数的逻辑决定。
  • 由于ggplot2的开发方式,可以这样获取列表:sub("geom_","",apropos("^geom_"))
  • 也许是解析帮助页面来获取用法?不会是 100%。

标签: r function arguments


【解决方案1】:

如果感兴趣的函数是这样定义的

f <- function(a = c("foo","bar")) {
    match.arg(a)
}

即when the options are defined as a vector to be later checked with match.arg function, then you could use the formals function which would give you a list of arguments with the values like in the following example

> formals(f)
$a
c("foo", "bar")

否则我认为没有 RTFSing 就不可能获得所有有效的参数值。

【讨论】:

    【解决方案2】:

    为了扩展@Pavel Obraztcov 的出色答案(以及上面@James 的评论),以这个函数f 为例:

    f <- function(x) {
      if(x == "foo") {
        return("you said 'foo'")
      } elif(x == "bar") {
        return("you said 'bar'")
      } elif(x == "xyz") {
        stop("'xyz' is not a valid option")
      }
    }
    

    (不一定是好的函数,但没有什么可以阻止某人编写这样的函数。)

    我们希望如何为参数x 定义“有效值”?我们可以说有效值为foobarxyz,因为f 显式处理这三个值。但是仅仅编写一段代码来解析一系列简单的 if-else 语句显然是不够的;并非所有功能都采用这种结构。

    f 通过抛出错误来处理xyz,所以也许只有foobar 是有效值?但在这种情况下,我们需要一段代码来检查f 的内部逻辑并确定xyz 总是导致错误。这不是一项微不足道的任务 - 我也不是 CS 专家,但我想知道 halting problem 是否在这里发挥作用。

    此外,f 对除foobarxyz 之外的值不执行任何操作 - 在这种情况下这可能很糟糕,但是否存在“返回某些东西”和“什么都不做”会是可接受的(“有效”)结果?

    如果f 不直接处理x,而是将其传递给其他函数,情况会更糟。现在我们需要追踪f的内部逻辑它调用的任何函数。

    所以不,没有通用的算法方法可以获取某个参数的所有有效选项。当文档和互联网出现故障时,阅读源代码(作为人类)一般方式。

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多