(数据分析工具)R学习笔记一:向量运算

向量和赋值

 

R 在已经命名的数据结构上起作用。其中,最简单的结构就是由一串有序数值构成的数值向量。

x <- c(1,2,3,4,5,6)

   这是一个用函数c()完成的赋值语句。(<-是赋值符号)

注:等同于assign(“x”,c(1,2,3,4,5,6))

 

向量运算

 

         基本的算术运算符就是常用的+-*/和做幂运算的^。另外还包括常用的数学函数,如log,exp,sin,cos,tan,sqrt等等。

       Min(x)max(x)分别给出向量x最小值和最大值的函数;

       Range(x)函数:是一个得到长度为2的向量,即c(min(x),max(x))

       Length(x)函数:给出向量x的元素个数;

       Sum(x)函数:计算向量x中元素的累加和;

       Prod(x)函数:得到x向量中元素的乘积;

       Mean(x)函数:计算均值,等价于sum(x)/length(x)

       Var(x)函数:计算样本方差,等价于sum((x-maen(z))^2)/(length(x)-1) ;(如果var()的参数是一个n*p的矩阵,则将该矩阵行与行之间看作是相互独立的p-变量的样本向量,从而得到一个p*p的样本协方差矩阵);

       Sort(x)函数:返回一个和x长度一样但元素以升序排列的向量;(order()sort.list()排序功能更强大

 

生成正则序列

 

           R有一些列产生常用数列的工具。

   常用的如,1:30等价于向量c(1,2,……,29,30);

注:在R表达式中,冒号优先级别最高。

函数seq() 是数列生成中最为常用的工具。它有五个参数,仅部分参数需要每次

都设定。起始的两个参数,表示一个数列的首尾。如果只是给定这两个值,则和冒号

运算符的效果完全一样了。如seq(2,10) 等价于2:10

       seq() 和其他许多R 函数的参数一样都可以用参数命名方式给定。在这情况下,

参数的顺序可以是任意的。这样,前两个参数就可以用from=value to=value 方式

设定;因此seq(1,30)seq(from=1, to=30)seq(to=30, from=1) 1:30 完全一

样。seq() 随后的两个参数是by=value length=value;它们分别表示这个数列的步

长和长度。如果二者没有设定,默认值就是by=1(步长为1)。

         例如:seq(-5,5,by=.2) -> s3,等价于将向量c(-5.0,-4.8,-4.6,……,4.6,4.8,5.0)赋给s3;类似的是,s4 <- seq(length=51, from=-5, by=.2),将在s4中产生一样的向量。

         第五个参数是along=vector。使用这个参数时,它必须是唯一的4,它可以创建数

1, 2, ..., length(vector),或者是空数列(在向量vector为空时)。

         Rep()函数:可以用各种复杂的方式重复一个对象。最简单的方式:s5 <- rep(x, times=5),这种方式先把x 的完整拷贝五次,保持x 的数列顺序,逐一放在s5 中。另一种有用的

方式是s6 <- rep(x, each=5)这种方式把x 中的每个元素都重复五次,然后将重复五次的元素逐一放入。

 

逻辑向量

 

         逻辑向量元素可以被赋予的值有TUREFALSENA(“不可得到”)。前两个值可以分别简写为T F

注意T F 仅仅默认设置为TRUE FALSE 的等价变量,不是系统保留字(reserved

word),因此可以被用户重写。正因为这样,你应该尽量使用属于系统保留字的TRUEFALSE

         R 的逻辑运算符是<<=>>=以及判断是否严格相等的== 和判断不等的!=。此外,如果c1 c2 是逻辑不等式,那么c1 & c2 是它们的交集运算(“与”)c1 | c2 是并集运算(“或”)!c1 c1 的非运算。

         注:在常规的算术运算中采用逻辑变量,它们会被强制转换成数值变量,FALSE 0 TRUE 变成1

 

缺损值

 

在某些情况下,向量的元素可能有残缺。

当一个元素或者值在统计的时候“不可得到”(not available)或者“值丢失”(missing value),相关位置可能会被保留并且赋予一个特定的值NA。任何含有NA 数据的运算结果都将是NA

函数is.na(x) 返回一个和x同等长度的向量。它的某个元素值为TRUE 当且仅当x中对应元素是NA

数值计算会产生第二种“缺损”值,也称为非数值(Not a NumberNaN

 

字符向量

 

函数paste() 可以有任意多的参数,并且把它们一个接一个连成字符串。

例如,labs <- paste(c("X","Y"), 1:10, sep="")

使得labs 变成一个字符向量。

c("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")

 

索引向量

 

逻辑向量:这种情况下,索引向量必须和被挑选元素的向量长度一致。向量中对应索引向量元素为TRUE的元素将会被选中,而那些对应FALSE的元素则被忽略,例如,y<-x[!is.na(x)]。这将创建(或重建)一个含x 中非缺省且次序不变的元素的对象y注意,如果x含有缺省值,y 在长度上将会比x短。

(x+1)[(!is.na(x)) & x>0] -> z

将创建一个对象z 并且把向量x+1 的值赋给它,其中要求x 中对应的元素既非缺省又是正值。

 

正整数向量:x[6]表示x 的第六个元素;

                              x[1:10],选择x的前10个元素(我们假定length(x)长度不小于10)

                              c("x","y")[rep(c(1,2,2,1), times=4)],会产生一个长度为16,由"x", "y", "y", "x" 重复4次而构成的向量。

 

负数向量:这种索引向量指定被排除的元素而不是包括进来。因此,y <- x[1(1:5)] x除开始5个元素外的其他元素都赋给y

 

字符串向量:这可能仅仅用于一个对象可以用name属性来识别它的元素。这种情况下,名字向量的子向量可以像上面第二条提到的正整数标签一样使用。

> fruit <- c(5, 10, 1, 20)

> names(fruit) <- c("orange", "banana", "apple", "peach")

> lunch <- fruit[c("apple","orange")]

你可能感兴趣的:(R/R语言)