目录
引言
数据是我们在使用R语言做统计和数据分析相关的工作经常用到的对象。但是当数据太多的时候,我们会构造数据框
、列表
、数组
和矩阵
等各种数据类型。但是数据每一列的索引就成了问题。尤其是在大量的重复性的调用时。这时候我们经常会使用attach
与detach
这两个函数来使我们的代码变得更简洁。本文就这两个函数进行讲解。
正文
构造数据
> rm(list=ls(all=TRUE))
> (Data <- data.frame(a = 1:5, b = 6:10))
a b
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
> (a <- 11:15)
[1] 11 12 13 14 15
> (c <- 16:20)
[1] 16 17 18 19 20
命令rm(list=ls(all=TRUE))
用来删除R语言工作空间中的现有变量。我们构造的数据集合有数据框Data
:含有变量a
,b
。两个全局变量:向量a
,向量c
。
索引
正常的取用Data
的数据会使用下面的命令(使用$
或者data[i, j]
的形式):
> Data$a
[1] 1 2 3 4 5
> Data[,1]
[1] 1 2 3 4 5
> Data$b
[1] 6 7 8 9 10
> Data[,2]
[1] 6 7 8 9 10
attach()
下面我们开始使用attach
函数,进行索引。
> b
错误: 找不到对象'b'
> attach(Data)
The following object is masked _by_ .GlobalEnv:
a
> a
[1] 11 12 13 14 15
> b
[1] 6 7 8 9 10
我们看到使用attach
时,The following object is masked _by_ .GlobalEnv:a
被提示。a
这个变量除了是Data
数据集的第一列元素,我们还在全局的环境中定义了11 12 13 14 15
给a
这个向量。而后面输出a
变量的值时,输出的时全局变量的值。再看b
这个向量,在attach
之前没有这个变量,但是在之后出现了b
这个变量并且输出的是Data
数据集中的第二列。
但是我们这时候想的到Data
中a
的数据,而不是全局中的a
怎么办呢。直接Data$a
就可以了。
> a
[1] 11 12 13 14 15
> Data$a
[1] 1 2 3 4 5
detach
在attach
之后一定不能忘记detach
,这样会避免不必要的变量重名。使得一切回复到attach
之前。
> detach(Data)
> a
[1] 11 12 13 14 15
> b
错误: 找不到对象'b'
> Data$a
[1] 1 2 3 4 5
> Data$b
[1] 6 7 8 9 10
> c
[1] 16 17 18 19 20
总结
上面就是attach
与detach
的具体用法。建议不熟悉R语言的初学者谨慎使用。最后希望可以帮助大家学习R语言。水平有限发现错误还望及时评论区指正,您的意见和批评是我不断前进的动力。