r语言常用函数(三)

小技巧:当我们输命令时,一行不足以容纳我们想要书写的内容时,我们可以按shift+enter键将一个命令分成多行

1.2.9  列表

  R列表是以其他对象为成分的有序集合。列表的成分与向量的元素不同,他们不一定是同一数据类型、模式或者相同长度。

> mylist<-list(sid=34453,sname="John",marks=c(14.3,12,15))
> mylist
$sid
[1] 34453

$sname
[1] "John"

$marks
[1] 14.3 12.0 15.0

对象mylist由三个成分组成:第一个是名称为sid的数值;第二个是名称为sname的字符串;第三个是名称为marks的数值向量。

可以通过下面的索引方式得到列表的元素:

> mylist[[1]]
[1] 34453
> mylist[[3]]
[1] 14.3 12.0 15.0
> mylist$sid
[1] 34453
> mylist$marks
[1] 14.3 12.0 15.0
注意,mylist[1]与mylist[[1]]是有区别的,mylist[1]是获取列表mylist的第一个成分构成的子列表。相反,mylist[[1]]提取列表的第一个组件的值,结果不再是一个列表。

> mode(mylist[1])
[1] "list"
> mode(mylist[[1]])
[1] "numeric"

列表成分的名称实际上是列表的一个属性,它可以像向量元素名那样进行操作:

> names(mylist)
[1] "sid"   "sname" "marks"
> names(mylist)<-c("Sid","Sname","Marks")
> names(mylist)
[1] "Sid"   "Sname" "Marks"

也可以通过添加附加元素的方式来扩展列表:

> mylist$pname<-c("xxx","yyy")
> mylist
$Sid
[1] 34453

$Sname
[1] "John"

$Marks
[1] 14.3 12.0 15.0

$pname
[1] "xxx" "yyy"

剔除列表的成分:

> mylist<-mylist[-4]
> mylist
$Sid
[1] 34453

$Sname
[1] "John"

$Marks
[1] 14.3 12.0 15.0
通过函数c()来合并列表:

> other<-list(age=19,sex="male")
> lst<-c(mylist,other)
> lst
$Sid
[1] 34453

$Sname
[1] "John"

$Marks
[1] 14.3 12.0 15.0

$age
[1] 19

$sex
[1] "male"

可以通过函数unlist()把列表中的所有元素转换为向量元素,转换后的向量元素的个数和列表中的所有数据对象的个数相同。把列表中的不同类型的数据转为统一的类型。

> unlist(mylist)
    Sid   Sname  Marks1  Marks2  Marks3 
"34453"  "John"  "14.3"    "12"    "15" 


1.2.10  数据框

  数据框是R软件中用于存储数据表的一种数据结构。数据框的每列可以有不同数据类型的数据。与列表类似。

创建数据框:

> mydataset<-data.frame(site=c("a","b","c"),season=c("Winter","Summer","Spring"),
+                       ph=c(7.4,3.6,2.8))
> mydataset
  site season  ph
1    a Winter 7.4
2    b Summer 3.6
3    c Spring 2.8

可以像矩阵那样访问数据框的元素:

> mydataset[3,2]
[1] Spring
Levels: Spring Summer Winter

因为season列的所有元素为字符型,因而该列被转换为因子类型
也可以用列名来获取数据框的一列数据:

> mydataset$site
[1] a b c
Levels: a b c

可以利用R的数据子集的优势来方便的访问数据框中的数据:

> mydataset[mydataset$ph>7,]
  site season  ph
1    a Winter 7.4

函数attach()可以直接访问数据框的列,无需添加相应的数据框名:

> attach(mydataset)
> mydataset[ph>7,]
  site season  ph
1    a Winter 7.4
> season
[1] Winter Summer Spring
Levels: Spring Summer Winter
函数detach()禁止直接访问数据框的列。

> detach(mydataset)
> season
Error: object 'season' not found
函数subset()可以对数据框进行简单的查询:

> subset(mydataset,ph>7)
  site season  ph
1    a Winter 7.4
> subset(mydataset,season=="Summer",)
  site season  ph
2    b Summer 3.6
如果要改变数据框中数据的值,只能通过以下方式:

> mydataset[mydataset$season=="Summer","ph"]<-mydataset[mydataset$season=="Summer","ph"]+1
> mydataset
  site season  ph
1    a Winter 7.4
2    b Summer 4.6
3    c Spring 2.8

与列表类似,可以在数据框中加入新列,只是新列必须和已有的数据框有相同的函数,

> mydataset$new<-c("n1","n2","n3")
> mydataset
  site season  ph new
1    a Winter 7.4  n1
2    b Summer 4.6  n2
3    c Spring 2.8  n3
获取数据框的行数和列数:

> nrow(mydataset)
[1] 3
> ncol(mydataset)
[1] 4

构建新函数

  R允许用户构建新函数,在创建该函数之前,我们需要检查R中是否已经有一个同名的函数存在。如果的确有同名的函数存在,R会把已经存在的R函数对用户隐藏起来。

> f<-function(x){
+     for(i in 1:10){
+         res<-x*i
+         cat(x,"*",i,"=",res,"\n")
+     }
+ }
> f(2)
2 * 1 = 2 
2 * 2 = 4 
2 * 3 = 6 
2 * 4 = 8 
2 * 5 = 10 
2 * 6 = 12 
2 * 7 = 14 
2 * 8 = 16 
2 * 9 = 18 
2 * 10 = 20 








猜你喜欢

转载自blog.csdn.net/huanhuanxiaoxiao/article/details/78473129
今日推荐