我已经达到了大约100个左右的个人功能,我用它来进行逐行数据分析。我通常使用f.<mnemonic>
命名法来表示我的功能,但我发现他们开始妨碍我的工作。有没有办法将它们隐藏在工作区中?这样ls()
没有显示它们,但我仍然可以使用它们?
答案 0 :(得分:10)
如果您有多次重复使用的功能,请考虑将它们放入包中。然后它们可以存在于自己的命名空间中,这会删除ls()杂乱,并允许您删除f.
前缀。
答案 1 :(得分:5)
您还可以将函数定义放入单独的环境中,然后attach()
该环境。 (这类似于Hong Ooi的建议,没有添加步骤将其变成可加载的包。)我在.Rprofile
文件中有这个代码来设置我常用的一些实用函数:
local(env = my.fns, { # create a new env. all variables created below go into this env.
foo <- function (bar) {
# whatever foo does
}
# put as many function definitions here as you want
})
attach(my.fns)
my.fns
中的所有功能现在都可以在命令行中使用,但ls()
中显示的唯一内容是my.fns
本身。
答案 2 :(得分:4)
试着这样就省去了“f-dots”:
fless <- function() { ls(env=.GlobalEnv)[!grepl("^f\\.", ls(env=.GlobalEnv) )]}
ls()函数查看环境中的对象。如果你只使用(我最初的话):
fless <- function() ls()[!grepl("^f\\.", ls())]
你得到......什么都没有。添加.GlobalEnv将ls()的焦点移动到通常的工作空间。索引非常简单。您只是删除(使用!运算符)以“f”开头的任何内容。而且自“。”是正则表达式中的一个特殊字符,你需要将其转义,...因为“\”也是一个特殊字符,所以转义需要加倍。
答案 3 :(得分:3)
未提及的几个选项是
.
开头的对象未显示在ls()
中(默认情况下;您可以在all.names = TRUE
调用中使用参数ls()
启用此功能),因此您可以将所有内容重命名为源文件中的.f.<mnemonic>
。sys.source()
直接获取环境。使用sys.source()
的示例如下所示:
env <- attach(NULL, name = "myenv")
sys.source(fnames, env)
其中fnames
是从中读取函数的文件名/路径列表。