R创建和控制的实体(entity)被称为对象。他们可以说变量,数组,字符串,函数,或者其他通过这些实体定义的更为一般性的结构。
一个典型的R语言会话中,很可能产生了大量的对象。有许多工具可以用来管理这些对象。下面我们介绍下面几种工具:
Ю ls()函数
Ю rm()函数
Ю save()函数
Ю 一些可以查看对象结构的函数,如class()和mode()
Ю exists()函数
►用ls()函数列出所有对象
在R会话过程中,对象是通过名字创建和保存的。ls()命令可以用来列出当前保存在R环境中现存的所有对象。其中一个有用的具名参数是pattern,该参数支持通配符。你可以让ls()列出所有名称具有特定模式的对象。
注:保存当前对象的地方被称为工作空间(workspace)。
> ls()
[1] "findruns" "findruns1" "first" [4] "joe" "kids" "messy" [7] "oddcount" "pivot" "preda" [10] "predb" "predc" "print.employee"[13] "provit" "Quicksort" "QuickSort" [16] "symdiff" "therest"
> ls( pattern = "pr" ) #列出所有名称中含有字符串“pr”的对象
[1] "preda" "predb" "predc" [4] "print.employee" "provit"
注:下列命令等价于ls():
> objects()
►用rm()函数删除特定的对象
使用rm()函数可以删除掉不再使用的对象。rm()的一个具名参数list可以使删除多个对象变得更容易。
> rm( findruns, findruns1, first, kids, messy )
> ls()
[1] "joe" "oddcount" "pivot" [4] "preda" "predb" "predc" [7] "print.employee" "provit" "Quicksort" [10] "QuickSort" "symdiff" "therest"
下面的代码把所有的对象名称都赋值给list,这样就删除了所有对象:
rm( list = ls() )
可以结合ls()函数的参数pattern一起使用,使其功能更加强大。
rm( list = ls( pattern = "pr" ) )
browseEnv()函数也很有用,可以在浏览器中显示所有的全局变量(或者在其他特定环境中的对象)。
►用save()函数报错对象集合
在若干个对象上调用save()可以把这些对象写入硬盘,以待之后的load()恢复。
> save( hz, "hzfile" )
> load( "hzfile" )
►查看对象内部结构
开发者经常需要知道某个库函数返回的对象内部的精确结构。如果文档没有给出足够信息,我们可以使用下面这些函数:class(),mode(),names(),attributes(),unclass(),str(),edit()。
如果你只是打印一个对象,结果完全由与该类相关联的print()的版本决定,这样带来的简洁性往往隐藏或扭曲了一些有价值的信息,调用unclass()来打印结果可以解决这个问题。str()函数也可以达成同样的目的,但是更加紧凑。
注:对一个对象使用unclass()得到的结果仍然属于其基础类。
names()函数能显示出对象有哪些组件,而attributes()函数除了显示对象的组件还会给出更多信息,特别是类名称。
►exists()函数
exists()函数根据其参数是否存在返回TRUE或者FALSE。要注意把参数放在引用号里。
> exists( "ac" )
[1] FALSE
这个函数有什麽用?难道我们不是一只都知道有没有创建一个对象?也知道这个对象是否存在吗?
答案是:不一定。如果你在编写一个通用代码,比如将会出现在R的CRAN代码库中,那么你的代码需要检查某个特定对象是否存在,如果不存在,则代码需要创建这个对象。
写通用代码时,有时如果对象不存在,可能也需要调用load(),这就需要使用exists()来检查对象是否存在。