清理工作区“隐藏”对象

时间:2011-04-28 22:29:03

标签: r

我已经达到了大约100个左右的个人功能,我用它来进行逐行数据分析。我通常使用f.<mnemonic>命名法来表示我的功能,但我发现他们开始妨碍我的工作。有没有办法将它们隐藏在工作区中?这样ls()没有显示它们,但我仍然可以使用它们?

4 个答案:

答案 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>
  • 与@ Aaron的答案类似,但使用sys.source()直接获取环境。

使用sys.source()的示例如下所示:

env <- attach(NULL, name = "myenv")
sys.source(fnames, env)

其中fnames是从中读取函数的文件名/路径列表。