0

在一个使用 R 的长期项目中,我定义了一组大约 50 个我一直使用的函数,另外还有 10 或 15 个我偶尔使用的函数。其中大部分不是我直接使用的功能;它们是我用来定义我直接使用的辅助函数。当我从 R 数据文件加载数据对象时,我并不总是记得我为这些对象命名的内容,因此我执行ls()以查看我加载的内容。但是,如果我已经加载了源 doe 文件,我必须在视觉上筛选输出以细化数据对象,这显然是不方便的。

所以我将这些函数包装到一个 R 包中。如果我只是加载包,那么一切都很好。我可以使用这些功能,但ls()只显示数据对象。

但是,我不断添加新功能。而且我发现重新制作包并不完全是微不足道的,所以我最终还是从源文件中加载了我的函数——直到我开始重新制作包。

我当然可以比我更多地自动化包构建过程,或者将我的新功能拆分到单独的源文件中。我还可以将函数拆分为不同的包——也许这会有所帮助。我想我只能通过对我直接调用的函数的闭包来使辅助函数可用——我没有尝试过——但是如果我想这样做的话,我不能直接使用辅助函数,而且看起来像如果有更简单的方法,那就大材小用了。这就是我想知道的:是否有一个我错过的简单技巧——一种使函数可供使用的方法,但可以很容易地向我展示我拥有的数据对象而不列出函数。如果没有,好的,但我认为这值得一问。谢谢。

这些问题: 在 r 中隐藏个人函数删除除函数之外的所有变量 提供了非常有用的答案。完成上述内容的最简单方法是什么?

4

2 回答 2

10

lsf.str返回命名空间中函数的向量,因此您可以使用它从ls.

setdiff(ls(), lsf.str())
于 2013-03-29T16:09:00.003 回答
3

将函数放在一个包结构的文件夹中(即在一个名为 R 的子文件夹中)并使用 package:devtools。您唯一需要做的就是load_all("myfuncs")编辑 R 代码时。一切都重新加载到 R 中,不会弄乱您的ls()列表,并且如果您需要更进一步,很容易打包和记录。但这不是强制性的。刚load_all编辑完。

于 2013-03-29T16:18:24.413 回答