R version 3.4.2 (2017-09-28) -- "Short Summer"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
本文的主要知识点来n源于《R统计建模与R软件》,同时还参考了
首先本文设计的数据结构包括(1)数字、字符与向量 (2)因子 (3)数组、向量与矩阵 (4)列表与数据框
1.1 xian gliang
1.2 其相关运用
能用向量的,就别用循环,因为R语言的的循环每一次运行都会检查语法错误所以非常慢,不如apply族函数趟过去
> x<-c(10.4,5.6,3.1,6.4,21.7)
> print(x)
[1] 10.4 5.6 3.1 6.4 21.7
向量的运算和数字相同,加减乘除都是对于向量中的元素的运算,同时注意,在R语言中,1:n可以快速生成一个序列,这样对于一些编程工作有着较好的支持能力。例如如下的例子:
> y<-3:7
> print(y)
[1] 3 4 5 6 7
> x*y
[1] 31.2 22.4 15.5 38.4 151.9
> x+y
[1] 13.4 9.6 8.1 12.4 28.7
> x/y
[1] 3.466667 1.400000 0.620000 1.066667 3.100000
> x-y
[1] 7.4 1.6 -1.9 0.4 14.7
> x[y]
[1] 3.1 6.4 21.7 NA NA
最后一个实际上是对于x向量的一个索引,由于x向量的length是5,所以第6位和第7位是NA缺失,同样的,我们求响应的其他函数都是相同的的操作方式,只要输入就行,基本上R语言的函数都是支持向量的。例子如下:
> sin(x)
[1] -0.82782647 -0.63126664 0.04158066 0.11654920 0.28705265
> sqrt(x)
[1] 3.224903 2.366432 1.760682 2.529822 4.658326
> exp(x)
[1] 3.285963e+04 2.704264e+02 2.219795e+01 6.018450e+02 2.655769e+09
> min(x)
[1] 3.1
> max(x)
[1] 21.7
> which.max(x)
[1] 5
最后的which.max()函数指向了x最大值所在的x向量的位置,同样的,要强调一点是之前那个序列发生机制反向也是可以做的,比如定义n:1也是可以的,所以这里我们需要记得这一点,这一点在for循环中用到很多。
1.2 相关函数
a. 等间隔函数seq()
用于产生等间隔的数列,基本形式:
seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),length.out = NULL, along.with = NULL, ...)
或者seq(length=value2,from=value1,by=value3)
Generate regular sequences. seq is a standard generic with a default method. seq. is a primitive which can be much faster but has a few restrictions. seq_along and seq_len are very fast primitives for two common cases.
举例如下:
> s2<-seq(length=5,from = 1,by=0.2)
> print(s2)
[1] 1.0 1.2 1.4 1.6 1.8
b.重复函数rep()
rep()是一个重复函数,它可以将某一向量重复若干次再放入新向量中,其基本语法规则为:rep(x,times=...)
rep replicates the values in x. It is a generic function, and the (internal) default
method is described here.
rep.int and rep_len are faster simplified versions for two common cases. They are not generic.
> rep(c(1,2,3),c(3,4,5))
[1] 1 1 1 2 2 2 2 3 3 3 3 3
是不是偷懒神器,hhhh,不过这个在做一些判别分析的时候非常有用,谨记
1.3 其他类型的神器向量
a.逻辑型
这里直接照抄《统计建模与R软件》的例子说明
> t<-1:7
> t>7
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> z<-c(TRUE,FALSE,T,F)
> z
[1] TRUE FALSE TRUE FALSE
> all((1:7)>3)
[1] FALSE
> any(1:7>3)
[1] TRUE
b.字符型向量R语言的向量也可以是字符型的向量,就可以理解为把普通向量的数字换成字符串就行了,但是这里一定要强调一个paste函数的作用,震惊.jpg
> (paste("X",1:6,sep = ""))
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> (paste("result_",1:4,sep = ""))
[1] "result_1" "result_2" "result_3" "result_4"
> (paste("Today is",date()))
[1] "Today is Fri Nov 17 00:44:08 2017"
> (paste(c('a','b'),collapse = '.'))
[1] "a.b"
> paste(1:10)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
paste函数往往在输出多个csv文件时有奇效,例如
> write.csv(iris,paste("iris",11,".csv",sep = ""))
> file.remove("iris11.csv")
就可以输出一个名字为iris11.csv的CSV文件了,第二行的命令用于删除该csv文件,是不是很nice
同时呢,我还想多讲一个expression()函数的问题,因为这有关于求导,上例子:
> D(expression(x^2+sin(y)+exp(z)),"x")
2 * x
c.复数向量
实数换复数就行,记得1+2i用complex(1,2)输入就行
1.3 向量下标运算
向量可以通过其在全向量中的位置来导出相应的元素,这种位置的描述可以是函数的输出,也可以是单纯的数字或者向量,这里我们复现《统计建模与R软件》中的例子来叙述该问题,请看例子
> x<-1:9
> c<-3:6
> x[c]
[1] 3 4 5 6
> x[-c]
[1] 1 2 7 8 9
逻辑向量注意na缺失的问题,见以下例子:
> zz<-c(1:3,rep(NA,3),NULL)
> zz
[1] 1 2 3 NA NA NA
> zz[zz<3]
[1] 1 2 NA NA NA
> zz[is.na(zz)]
[1] NA NA NA
> zz[!is.na(zz)]
[1] 1 2 3
是不是略智障,但是还有两个问题需要记录一下,hh,见下例子:
> c("a","b","c")[rep(c(1,2,3),times=3)]
[1] "a" "b" "c" "a" "b" "c" "a" "b" "c"
> (ages<-c(Li=33,Zhang=29,Liu=18))
Li Zhang Liu
33 29 18
> ages["Li"]
Li
33
#本来觉得向量重要但是要写的也不多吧,结果还是跑偏加自己蠢写了一大堆,hh。
OK,到这里,我的向量篇就结束了,希望各位前辈批评指正,我还是个菜鸡,希望各位大佬多多指点,联系留言即可,或者可以发邮件到yzs94nb@163.com交流。