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
- R语言学习笔记1——对象的创建
- R语言学习笔记—删除对象
- R语言学习笔记——1
- R语言学习笔记——R语言绘图
- R语言学习笔记 - 创建数据集
- R语言学习②——R对象
- R语言学习笔记 —— 数据的分组处理
- R语言学习笔记 —— table 函数的应用
- R语言的学习笔记
- R语言学习笔记——基础
- R语言学习笔记——函数
- R语言学习笔记(1):R是什么
- R语言学习笔记(1):R是什么
- R语言学习笔记(1):R是什么
- R语言学习笔记(R对象和数据组织)
- R语言学习笔记1
- R语言学习笔记1
- R语言学习笔记︱Echarts与R的可视化包——地区地图
- 15,进程间通信
- Hibernate二级缓存攻略
- poj 2226 二分图 最小顶点覆盖 “草泥马”
- C#识别验证码
- Thread.wait()与Thread.yield()的区别
- R语言学习笔记1——对象的创建
- 能做到“每天都进步一点吗”
- 华为笔试题
- 如何获得 ios的系统版本号
- 杭电2141
- 教你制作Win8安装U盘
- ByteToString
- 常用矩阵计算C语言代码
- 常用内部控件(一)