在R中为rm写一个快捷函数(list = ls())

时间:2014-02-12 04:32:00

标签: r list function rm

我处于学习R的早期阶段,并认为这将是一个简单的练习。想写一个快捷方式函数来从工作区中删除所有变量。我尝试了以下内容(最初测试它是使用print语句运行的):

clr<-function(x){ 
  rm(list = ls()) 
  #sprintf('this works')
}

但是在我获取代码并运行命令“clr()”(当然没有引号)之后上面什么也没做。

我是否需要指定环境(env = globalenv())?我试过这个,但无济于事。

提前致谢!

2 个答案:

答案 0 :(得分:4)

您的函数与环境有两个问题:ls()rm()在当前环境中工作,这将是函数clr()的执行框架。

换句话说,ls()将为您提供clr()框架中可用的对象,这在您的函数的情况下是无效的(调试它并查看ls()返回的内容你在clr())的执行框架中。因此,您要求rm()删除任何内容。

修复后,您仍需要告诉rm()从哪个环境中删除对象。在这里你犯了另一个错误; rm()的第一个参数是...,这意味着您需要在rm()参数之后 ...之后完全命名envir的参数。您想要的参数是env而不是clr <- function() { ENV <- globalenv() ll <- ls(envir = ENV) ll <- ll[ll != "clr"] rm(list = ll, envir = ENV) }

这是一个能够完成您想要的功能,而且它不会自行删除(!)。

> ls()
[1] "clr"  "obj1" "obj2"
> clr()
> ls()
[1] "clr"

在使用中我们有

.

请注意,正如所写,这不会删除隐藏的对象(那些ls(all.names = TRUE)作为其名字的第一个字符的对象)。为此,您需要使用x

最后一句话,但您在clr()的定义中不需要参数{{1}};没有参数的函数很好。

答案 1 :(得分:0)

我认为这是错误的问题rm(list = ls(...))构造只是一种由用户之间复制的代码传播的恶意病毒。

这种结构需要什么?

  • 整洁的工作空间
  • 减少内存使用
  • 简化依赖网络(rm对此没有帮助)

为什么R的设计师不能提供干净的工作空间?他们这样做,它只是被滥用,Windows的默认行为以无益的方式隐藏细节。

为什么R启动时工作区不干净?

当R启动时,它总是与“当前目录”一起使用,就像是“在一个文件夹中”,如果你要求“file1.iaf”,你不需要明确地指向“C:/温度/ myfolderofiafs / file1.iaf”。

在unix中,这就是你输入时所处的位置

R

,您可以在键入

时直接看到它
pwd

在Windows中,它在命令行中是相同的(用dir替换pwd并查找“...的目录”),但当你“(双击)R快捷键”时系统会为你做同样的事情,但它开始的地方是由shorctut的“属性”控制的。您可以通过右键单击快捷方式,单击“属性”查看“开始”字段中显示的内容。 (它可能是系统通配符,如%HOMEPATH%或其他,但可能代表“C:/ Users / username / Documents”。)

Right-click on Properties

enter image description here

  1. R默认从你的文件夹中的一个开始,因为它是唯一真正知道有权执行操作的地方。

  2. 我使用的是Windows 8,这在Windows 3.1,95,98,NT,CE,2000,XP,Vista和7上略有不同,但涵盖了所有可以留给Google的内容。

  3. 看一下“开始”文件夹,你很可能看不到一个名为“.Rdata”的文件,但那是因为它被隐藏了。启动R,并在执行任何其他操作之前运行以下代码:

    list.files(all = TRUE)
    

    是否有“.Rdata”文件? (您可以使用“dir / a”在命令行中查看它,或者在unix中使用“ls -a”来查看它。)

    当您启动R时,默认情况下会加载该文件,就好像您已完成以下操作:

    load(".Rdata")
    

    这就是为什么工作区“需要清理”,但在我看来你应该删除那个“.Rdata”文件并摆脱笨重的黑客工作流程。

    您可以从R修复此问题,执行此操作:

    unlink(".Rdata")
    

    当您退出R时,选择“否”,以便不再重新创建此隐藏文件。如果您不小心创建它,请将其捕获并再次杀死它。

    如果您确实要保存整个工作区,请使用:

    save.image("myentireworkspaceorperhapssomesensiblefilenameforit.Rdata")
    

    或只是它的一些对象:

    save(keepme, keepme2, andme, file = "justsomeofmyclingyobjects.Rdata")
    

    您可以通过设置文件夹的视图属性在Windows中看到隐藏的“.Rdata”文件(这是Windows 8,我通过“查看/选项”更改文件夹和搜索选项'来获取它): / p>

    Really, just show me what's actually here

    选择“显示隐藏文件,文件夹和驱动器”。我也强烈建议您取消选中“隐藏已知文件类型的扩展名”,因为扩展名实际上是文件名的一部分并隐藏它有时只是混淆了所有内容。 (默认情况下,Windows会使您的文件的真实名称为“file.R.txt”,如果您尝试将其从“file.txt”重命名为“file.R”而没有此设置)。

    还有更多内容,在快捷方式属性的“目标”字段中,您可以添加诸如“--no-restore”或“--no-restore-data”之类的参数。

    Not ideal, but it's an option

    这也将“修复”上面的最终问题,但不是以正确的方式IMO。

    这些参数可在命令行中找到(在Windows上):

    Rgui --help
    

    但是您需要使用完整路径或在路径中使用R的bin / *文件夹才能使用它。有关更全面的讨论,请参阅?Startup