Make_It_Fun

博客园 首页 联系 订阅 管理

数组(array)与矩阵类似,但维度可以大于2.

myarray<-array(vector,dimensions,dimnames)> dim1<-c("A1","A2")

> dim2<-c("B1","B2","B3")
> dim3<-c("C1","C2","C3","C4")
> Z<-array(1:24,c(2,3,4),dimnames=list(dim1,dim2,dim3));

> Z
, , C1

B1 B2 B3
A1 1 3 5
A2 2 4 6

, , C2

B1 B2 B3
A1 7 9 11
A2 8 10 12

, , C3

B1 B2 B3
A1 13 15 17
A2 14 16 18

, , C4

B1 B2 B3
A1 19 21 23
A2 20 22 24

由于不同的列可以包含不同模式(数据行、字符型),数据框的概念较矩阵来说更为一般。数据框可以通过函数data.frame()来实现。

mydata<-data.frame(col1,col2,col3,...)

> patientID<-c(1,2,3,4)
> age<-c(25,34,28,52)
> diabetes<-c("Type1","Type2","Type1","Type1")
> status<-c("Poor","Improved","Excellent","Poor")
> patientdata<-data.frame(patientID,age,diabetes,status)
> patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
> patientdata[1:2]
patientID age
1 1 25
2 2 34
3 3 28
4 4 52

> patientdata[c("diabetes","status")]
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type1 Poor
> patientdata$age
[1] 25 34 28 52
"$"的作用是选取一个给定数据框中的某个特定变量。例如你想生成糖尿病类型变量中diabetes和病情变量status的列连边,使用一下代码即可:

> table(patientdata$diabetes,patientdata$status)

Excellent Improved Poor
Type1 1 0 2
Type2 0 1 0
每个变量名前都键入一次patientdata$可能会让人生厌,所以不妨走一些捷径。可以联合使用函数attach()和detach()或单独使用函数with()来简化代码。

代码:

> summary(mtcars$mpg)

> plot(mtcars$mpg,mtcars$disp)
> plot(mtcars$mpg,mtcars$wt)

可以替换成:

> attach(mtcars)

> summary(mpg)

> plot(mpg,disp)
> plot(mpg,wt)
> detach(mtcars)

当名称相同的对象不止一个时,这种方法的局限性就很明显了。

> mpg<-c(25,36,47)
> attach(mtcars)
The following object is masked _by_ .GlobalEnv:

mpg

> plot(mpg,wt)
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
> mpg
[1] 25 36 47

这里,在数据框mtcars被绑定(attach)之前,我们的环境中已经有一个名为mpg的对象。在这种情况下,原始对象取得优先权,这与你想要的结果有所出入。由于mpg中有3个元素而disp中疣32个元素,故plot语句出错。attach()和detach()最好在你分析一个单独的数据框,并且不太可能有多个同名对象市使用。在任何情况下都要当心那些告知某个对象已经被屏蔽(masked)的警告。

with()

> with(mtcars,{summary(mpg,disp)
+ plot(mpg,disp)
+ plot(mpg,wt)
+ })
>

在这种情况下,大括号{}之间的语句都是针对数据框mtcars执行,这样就无需担心名称冲突了,如果仅有一条语句(例如summary(mpg))

函数with()的局限性在于,复制仅在此函数的括号内生效。考虑以下代码:

> with(mtcars,{
+ stats<-summary(mpg)
+ stats
+ })
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.42 19.20 20.09 22.80 33.90
> stats
Error: object 'stats' not found

如果你需要创建在with()结构意外存在的对象,使用特殊赋值符<<-代替标准赋值符(<-)即可,它可将对象保存到with()之外的全局环境中。这一点可通过以下代码阐明:

> with(mtcars,{
+ nokeepstates<-summary(mpg)
+ keepstats<<-summary(mpg)
+ })
> nokeepstats
Error: object 'nokeepstats' not found
> keepstats
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.42 19.20 20.09 22.80 33.90

实例标识符

在病例数据中,病人编号(patientID)用于区别数据集中不同的个体。在R中,实例标识符(case identifier)可通过数据框操作函数中的rowname选项指定。例如:

patientdata<-data.frame(patientID,age,diabetes,status,row.names=patientID)

 

posted on 2016-03-11 13:57  Make_It_Fun  阅读(1521)  评论(0)    收藏  举报