R语言学习笔记1——对象的创建

来源:互联网 发布:电子盖章软件免费版 编辑:程序博客网 时间:2024/06/10 12:35

R语言学习笔记1

——对象的创建

杨旭东(2012-3-3)

从昨天开始学习R语言,主要参考资料是网上下的《R软件中文版教材》。

R既可以说是一种编程语言,又可以说是一套完整的软件套件,包括IDE和各种库。R主要用与统计分析,可以看作是由AT&T贝尔实验室所创的S语言发展出的一种方言。R的安装文件以及安装说明都可以在Comprehensive RArchive Network(CRAN)网站(http://cran.r-project.org/)上下载,包括各种学习资料和文档。

第一次接触R是在淘宝公司实习的时候,当时带我的师傅给我看了他用R写的SimRank算法,区区几行代码就把一个复杂的算法完整的实现了出来,当时就感到R的强大,但是迫于实习任务之重,也就没有时间深入学习。前几天看到王老师也在用R,重新激发了我学习R的兴趣,看来R也不是那么非主流嘛!

闲话少说,今天的主要内容是学习如何在R中使用对象。

 

R通过一些对象来运行,当然首先这些对象是用它们的名称和内容来刻画的,其次也通过对象的数据类型即属性来刻画。所有的对象都有两个内在属性:类型和长度。类型是对象元素的基本种类,共有四种:数值型,字符型,复数型和逻辑型(FALSE或TRUE),虽然也存在其它的类型,但是并不能用来表示数据,例如函数或表达式;长度是对象中元素的数目。对象的类型和长度可以分别通过函数mode和length得到。

向量(Vector) 函数vector有两个参数:类型(mode)和长度(length),创建的向量中元素值取决于参数所指定的数据类型:数值型向量则元素值都为0,逻辑型都为FALSE,字符型都为""。以下三个函数有几乎相同的效果(创建一个向量)并且只有一个参数即长度:numeric(),logical(),和character()。

例:

> v <- vector("numeric", 4)

> v

[1] 0 0 0 0

> z <- numeric(4)

> z

[1] 0 0 0 0

> z[1] <- 3

> z

[1] 3 0 0 0

> l <- logical(3)

> l

[1] FALSE FALSE FALSE

> l[2] <- TRUE

> l

[1] FALSE TRUE FALSE

> l[3]

[1] FALSE

> l[2]

[1] TRUE

> str <- character(3)

> str

[1] "" "" ""

> str[1] = "123"

> str

[1] "123" ""    ""  

> z

[1] 3 0 0 0

> z <- 2:5

> z

[1] 2 3 4 5

> z <- 2:6

> z

[1] 2 3 4 5 6

> z <- 2:4

> z

[1] 2 3 4

 

因子(Factor) 一个因子不仅包括分类变量本身还包括变量不同的可能水平(即使它们在数据中不出现)。因子函数factor用下面的选项创建一个因子:

factor(x, levels = sort(unique(x), na.last= TRUE), labels = levels, exclude = NA, ordered = is.ordered(x))

levels用来指定因子可能的水平(缺省值是向量x中互异的值);labels用来指定水平的名字;exclude表示从向量x中剔除的水平值;ordered是一个逻辑型选项用来指定因子的水平是否有次序。回想数值型或字符型的x。下面有一些例子:

> factor(1:3, levels=1:5)

[1] 1 2 3

Levels: 1 2 3 4 5

> factor(1:3,labels=c("A","B","C"))

[1] A B C

Levels: A B C

> ff <- factor(1:5, exclude=4,labels=c("A","B","C","D"))

> ff

[1] A   B    C    <NA>     D

Levels: A B C D

函数levels用来提取一个因子中可能的水平值:

> levels(ff)

[1] "A" "B""C" "D"

 

矩阵(Matrix) 一个矩阵实际上是有一个附加属性(维数dim)的向量,维数即为一个长度为2的向量,用来指定矩阵的行数和列数。一个矩阵可以用函数matrix来创建:

matrix(data = NA, nrow = 1, ncol = 1, byrow= FALSE, dimnames = NULL)

选项byrow表示数据给出的值是要按列填充(缺省值)还是按行填充(如果为TRUE)。可以通过选项dimnames给行列命名。

> matrix(data=5, nr=2, nc=2)

    [,1]    [,2]

[1,]   5    5

[2,]   5    5

> matrix(1:6, 2, 3)

    [,1]    [,2]   [,3]

[1,]   1    3    5

[2,]   2    4    6

> matrix(1:6, 2, 3, byrow=TRUE)

[,1]  [,2]  [,3]

[1,] 1    2   3

[2,] 4    5   6

> matrix(1:6, 2, 3, byrow=TRUE,dimnames=list(c("row1","row2"), c("col1", "col2","col3")))

       col1  col2    col3

row1   1    2    3

row2   4    5    6

另一种创建矩阵的方法是给维数适当的赋值(初始值为NULL):

> x <- 2:9

> x

[1] 2 3 4 5 6 7 8 9

> dim(x)

NULL

> dim(x) <- c(2, 4)

> x

    [,1]   [,2]   [,3]   [,4]

[1,]   2    4    6   8

[2,]   3    5   7    9

 

数据框(Data frame)数据框相当于是一个向量的数组,它内部可以包含不同类型的对象。一个数据框可以由函数read.table间接创建;也可以用函数data.frame来创建。数据框中的向量必须有相同的长度,如果其中有一个比其它的短,它将“循环”整数次(以使得其长度与其它向量相同):

> x <- 1:4; n <- 10; M <- c(10,35); y <- 2:4

> data.frame(x, n)

x n

1 1 10

2 2 10

3 3 10

4 4 10

> data.frame(x, M)

x M

1 1 10

2 2 35

3 3 10

4 4 35

> data.frame(x, y)

Error in data.frame(x, y) : arguments implydiffering number of rows: 4, 3

列名也是可以改变的,例如,data.frame(A1=x,A2=n)。用户也可以使用row.names给行命名,但是,这个命名向量必须是字符型的而且长度等于这个数据框的行数。最后,注意数据框和矩阵一样有维数这个属性。

> df <- data.frame(A1=x, A2=n,row.names=c("row1", "row2", 'row3', 'row4'))

> df

    A1  A2

row1 1  10

row2 2  10

row3 3  10

row4 4  10

> dim(df)

[1] 4 2

 

列表(List) 列表可以用list函数创建,方法与创建数据框类似。它对其中包含的对象没有什么限制。和data.frame()比较,缺省值没有给出对象的名称;

 

时间序列(Time-series) 函数ts可以由向量(一元时间序列)或者矩阵(多元时间序列)创建一个ts型对象,并且有一些表明序列特征的选项(带有缺省值);

 

列表和时间序列的使用比较复杂,请查看相关资料。

 

表达式(Expression) 表达式类型的对象在R中有着很基础的地位,是R能够解释的字符序列。所有有效的命令都是表达式。一个命令被直接从键盘输入后,它将被R求值,如果是有效的则会被执行。在很多情况下,构造一个不被求值的表达式是很有用的:这就是函数expresssion要做的。当然也可以随后用eval()对创建的表达式进行求值。

> x <- 3; y <- 2.5; z <- 1

> exp1 <- expression(x / (y +exp(z)))

> exp1

expression(x/(y+ exp(z)))

> eval(exp1)

[1] 0.5749019

表达式也可以在其它地方用来在图表中添加公式(p.43);表达式可以由

字符型变量创建;一些函数把表达式当作参数,例如可以求偏导数的函

数D。

> D(exp1, "x")

1/(y + exp(z))

> D(exp1, "y")

-x/(y + exp(z))^2

> D(exp1, "z")

-x * exp(z)/(y +exp(z))^2



原创粉丝点击