对于那些有一点编程经验的人来说,vector,matrix,array,list,data.frame就相当于编程语言中的容器,因为只是将R看做数据处理工具所以它们的底层是靠什么实现的,内存怎么处理的具体也不要深究。 R语言很奇怪的是它是面向对象的语言,所以经常会调用系统的方法,而且更奇怪的是总是调用“谓语”的方法,用起来像是写句子一样,记起来真是让人费解。比如is.vector(),read.table(),as.vector()、、 直接开始吧:(由于习惯,大部分用"="代替"<-") 一、向量vector, 1.是最基本的数据容器,里面的数据必须是同一类型,先看基本用法: a<-c(1,2,3,4,5,6,7,8,9) 或者赋值函数assign, assign("a",c(1,2,3,4,5,6,7,8,9)) > is.vector(a) > is.matrix(a) [1] FALSE > b=runif(20,min=1,max=20) 或者按照一定的步长: > a=seq(1,20,by=3) 或者重复: > s=rep(a,times=3) 逻辑向量: > b=a>8;b 缺失数据用大写NA表示,数据不确定用NaN表示,数据是无穷用Inf表示(一会全大写,一会大写加小写,一会首字母大写,真是醉了),判断是否为空数据用函数is.na(),判断是否不确定用函数is.nan(),数据是否有限用is.finite(),数据是否为无穷用函数is.infinite(): > z=c(1:3,Na);z > is.na(z) 将缺失的数据赋值为0: > z[is.na(z)]=0;z 下面将这几个有问题的数据放在一个向量中: > z=c(0/1,0/0,1/0,NA);z 2.vector中元素的下标引用. > a=round(runif(9,min=1,max=9)) 可以看见,与容器不同,vector的下标是从1开始的: > a[0] > a[1] 选取第2和第3个数,引用非常方便: 引用除了第一个值的所有数,用了减号"-": 3.vector作为R语言工具,需要了解vector的各种运算。 ①+-×÷,其他运算如log,exp,cos,sqrt等也相似。其意义是对应的向量的每个元素分别做运算, > x=c(1,2,3) > x^2 > cos(x) > sqrt(x) ②与向量有关的函数,min(x),max(x), sum(x),range(x),太简单就不在细说,需要强调的是which.min(x),这个还是蛮重要的。 > a=rnorm(10,mean=5,sd=2) 其他的如sd(a),var(a),length(a),sort(a),分别是求方差,标准差,长度,排序。与python不同R语言的vector所有操作都不会改变vector本身的值。 4.由于R是一种基于对象的语言,R的对象分为单纯对象和复合对象两种,单纯对象的所有元素都是同一数据类型(数值、字符串),元素不再是对象。复合对象的元素可是是不同的类型,每个元素是一个对象。 R的对象都有两个基本的属性:mode和length,向量的类型为:logical(逻辑型)、numeric(数值型)、complex(复数型)、character(字符型)。 > b=c(0:9) 二、数组array:多维的同一类型集合(字符型、数值型、逻辑型、复数型),R可以很容易地生成和处理数组,特别是矩阵matrix是一个二维数组。 1.可以通过定义dim(维度)将向量变成matrix。 a=c(1,3,4,5,6,7,8,9,3) 或者: > a=array(a,dim=c(3,3)) 或者: > a=matrix(a,nrow=3,ncol=3);a > is.vector(a) > is.list(a) 可以发现,a已经通过定义维度将其变成了一个矩阵(matrix)和数组(array),下面将讲matrix其实是一个二维的array。 2.下标引用> a=c(1:24) |
|