2015-04-04 139 views
0

我正在编写一个包含其他几个导出函数使用的内部函数的包,但导出的函数都具有不同的参数。如何记录调用相同函数但具有不同参数的函数?

这里是我的意思简化:

general <- function(...) { 
    # do something based on which function was called 
} 
one <- general 
two <- general 

我知道这似乎不可思议,但所有被化名为general功能使用完全相同的代码,但它们有不同的参数。所以我可能会打电话one(id = "foo")或​​。

我的问题是如何用Rxygen以R CMD检查不会投诉的方式记录这些函数?

我想记录影响其正常参数的各项功能,所以这是什么,我希望能够使用:

general <- function(...) { 
    # do something based on which function was called 
} 
#' @param id The id 
#' @export 
one <- general 
#' @param class The class 
#' @export 
two <- general 

但后来我得到警告,当我检查我的包,如

* checking Rd \usage sections ... WARNING 
Undocumented arguments in documentation object 'one' 
    '...' 
Documented arguments not in \usage in documentation object 'one': 
    'id' 

two函数的类似警告。

我试图用手工编辑.Rd文件改变

\usage{ one(...) } 

进入

\usage{ one(id) } 

要尝试解决此警告,但是当我运行检查它似乎是在创建文档再次覆盖我的改变。

是否有解决方法?

感谢

回答

4

具有实际上都一样的功能似乎混乱,不会有产生,在这种安排通过R CMD check标准的R文件的方式别名的想法。

一个更好的方法是编写函数onetwo作为围绕general的包装,可以将参数传递给它,而不是别名。这样,你可以给他们实际的参数,你可以使用标准的Rd标记(或roxygen,如果这是你如何生成你的文档)文档。从最终用户的角度来看,这将更加清晰,并且不应该让您更难设计为开发人员。

编辑:基于您的评论,这可能是工作如下:

general <- function(..., from) { 
    if(from == "one") { 
     # do stuff 
    } else if (from == "two") { 
     # do other stuff 
    } 
} 

one <- function(...) { 
    general(..., from = "one") 
} 

two <- function(...) { 
    general(..., from = "two") 
} 

这样您就可以知道哪些功能原名不依靠match.call,这似乎真的很危险,而且还能够记录功能onetwo完成并通过R CMD check

+0

谢谢。我曾尝试制作简单地调用'general'的导出函数包装器,但后来我失去了被调用的原始函数的信息。在'general'里面我使用'match.call()[1]'来知道最初调用了哪个函数,但是如果我使用包装器,它将不起作用。我知道这似乎令人困惑和不理想,但我真的认为这是我的应用程序的最好和最简单的方法。我希望你不会说“不会有办法”,那是我最大的恐惧:) – 2015-04-04 21:00:20

+1

@daattali请参阅我的编辑进一步的建议。 – Thomas 2015-04-04 21:15:32

相关问题