向函数添加元数据

时间:2014-12-12 18:57:07

标签: r attr

我有以下功能,我想在其上添加一个包含元数据的“doc”变量:

func <- function(x)
{ 
    x
}
attr(func, "doc") = "some documentation"

但为了清楚起见,我想在函数中添加一些元数据:

func <- function(x)
{
    doc = "some documentation in the function"
    x
}

然而,当我尝试:

env = environment(func)
> env$doc
NULL
> get("doc", env)

我没有检索到我需要的信息。我当然错过了一个重点!

1 个答案:

答案 0 :(得分:1)

您可以使用闭包:

docAdder <- function(fun, doc) {
    newFun <- function(...) {
        vars <- as.list(match.call())
        if(length(vars)<2) {
            return(doc)
        }
        return(fun(...))
    }
    newFun
}

如果没有提供参数,此函数只会使原始函数返回“doc”。

然后:

rev2 <- docAdder(rev, "this function reverses a vector")
rev2(c(1,2,3,4,5))
[1] 5 4 3 2 1
rev2()
[1] "this function reverses a vector

然而,在R中执行此操作的一般方法是使用像 Roman 这样的包和文档。