首先介绍向量相关内容
> # 向量
> #1 赋值 三种方法
> x<-c(2,3,4,12,6,3,77,21)
> x
[1] 2 3 4 12 6 3 77 21
> c(4,5,6,2,3,8,7,1,9)->xx
> xx
[1] 4 5 6 2 3 8 7 1 9
> assign("xxx",c(2,3,6,5,8,4,8,7))
> xxx
[1] 2 3 6 5 8 4 8 7
> Y<-c(x,100,xx,200,xxx)
> Y
[1] 2 3 4 12 6 3 77 21 100 4 5 6 2 3 8 7 1 9
[19] 200 2 3 6 5 8 4 8 7
> #2 运算
> x<-c(-1,2,3);y<-c(3,7,8)
> v<-2*x+y+1;v
[1] 2 12 15
> x*y
[1] -3 14 24
> x/y
[1] -0.3333333 0.2857143 0.3750000
> x^2+y^2
[1] 10 53 73
> y^x
[1] 0.3333333 49.0000000 512.0000000
> #%/% ---- 表示整数除法
> #%% ----- 表示求余数
> 5%/%3
[1] 1
> 5%%3
[1] 2
> exp(1)
[1] 2.718282
> sqrt(y)
[1] 1.732051 2.645751 2.828427
> sqrt(-2)
[1] NaN
警告信息:
In sqrt(-2) : 产生了 NaNs
> sqrt(-2+0i) # 复数开根号的正确方法
[1] 0+1.414214i
> #3 向量运算相关函数
> min(x)
[1] -1
> max(x)
[1] 3
> range(xx)
[1] 1 9
> #which.max,which.min 表示在第几个分量求到最大最小值
> which.min(x)
[1] 1
> which.max(x)
[1] 3
> #sum() 求向量分量之和, prod() 求向量分量连乘积, length() 求向量分量的个数
> #median() 求向量中位数, mean() 求向量均值, var() 求向量方差, sd() 求向量标准差
> #sort() 求顺序统计量,顺序统计量的下标由 order() 或 sort.list() 给出
> x
[1] -1 2 3
> x<-c(10,6,4,8,7)
> sum(x)
[1] 35
> prod(x)
[1] 13440
> length(x)
[1] 5
> median(x)
[1] 7
> mean(x)
[1] 7
> var(x)
[1] 5
> sort(x)
[1] 4 6 7 8 10
> order(x)
[1] 3 2 5 4 1
> sort.list(x)
[1] 3 2 5 4 1
> # 等差数列
> 2.3:6
[1] 2.3 3.3 4.3 5.3
> 4:6.7
[1] 4 5 6
> # 注意 1:n 这种运算优先级比乘除法要高!
> n<-10
> 1:10-1
[1] 0 1 2 3 4 5 6 7 8 9
> 1:n-1
[1] 0 1 2 3 4 5 6 7 8 9
> 1:(n-1)
[1] 1 2 3 4 5 6 7 8 9
> #seq() 产生等距离间隔的数列
> # 格式 seq(from= 起始数值 ,to= 结束数值 ,by= 相应的中间间隔数值 )
> seq(7,10,by=0.5)
[1] 7.0 7.5 8.0 8.5 9.0 9.5 10.0
> # 另一种格式 seq(length= 数列长度 ,from= 起始数值 ,by= 相应的中间间隔数值 )
> seq(7,7,0.5)
[1] 7
> seq(length=7,7,0.5)
[1] 7.000000 5.916667 4.833333 3.750000 2.666667 1.583333 0.500000
> seq(length=7,from=7,0.5)
[1] 7.000000 5.916667 4.833333 3.750000 2.666667 1.583333 0.500000
> seq(length=7,from=7,by=0.5)
[1] 7.0 7.5 8.0 8.5 9.0 9.5 10.0
> #rep() 重复函数,将某向量重复若干次在放入新的变量中
> x<-c(1,2,3)
> x
[1] 1 2 3
> z<-rep(x,times=3)
> z
[1] 1 2 3 1 2 3 1 2 3
> # 逻辑向量,逻辑运算符有 <,<=,>,>=,==,!=,& 与 ,| 或 ,! 非
> x<-1:7
> x
[1] 1 2 3 4 5 6 7
> x>3
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE
> z<-c(TRUE,FALSE, 真,假 )
> z
[1] 1 2 3 1 2 3 1 2 3
> z<-c(TRUE,FALSE,F,T)
> z
[1] TRUE FALSE FALSE TRUE
> #all 用来判断一个逻辑向量是否都为真值
> all(c(1,2,3,4,5,6,7)>3)
[1] FALSE
> #any 用来判断一个逻辑向量其中是否有真值
> any(c(1,2,3,4,5,6,7)>3)
[1] TRUE
> #NA 表示缺失的数据
> z<-c(1:5,NA)
> z
[1] 1 2 3 4 5 NA
> z<-c(1:5,na) # 注意大小写
错误 : 找不到对象 'na'
> #is.na() 用于检测数据中是否有缺失项,返回值为真,说明有缺失项
> is.na(Z)
错误 : 找不到对象 'Z'
> is.na(z)
[1] FALSE FALSE FALSE FALSE FALSE TRUE
> # 将缺失项数据改为一个数值
> z[is.na(z)]<-1000
> z
[1] 1 2 3 4 5 1000
> #is.nan() 检测数据是否不确定, TRUE 为不确定
> #is.finite() 检测数据是否有限, TRUE 为有限
> #is.infinite() 检测数据是否为无穷, TRUE 为无穷
> x<-c(0/1,0/0,1/0,NA);x
[1] 0 NaN Inf NA
> is.nan(x)
[1] FALSE TRUE FALSE FALSE
> is.finite(x)
[1] TRUE FALSE FALSE FALSE
> is.infinite(x)
[1] FALSE FALSE TRUE FALSE
> is.na(x)
[1] FALSE TRUE FALSE TRUE
> #4 字符型向量
> # 赋值
> y<-c("as","dfg","hjk","l")
> y
[1] "as" "dfg" "hjk" "l"
> #paste 函数可以把字符串的每个变量连成一个字符串,中间用空格分开
> paste("My","Job")
[1] "My Job"
> paste(y)
[1] "as" "dfg" "hjk" "l"
> paste(y[1],y[2])
[1] "as dfg"
> paste(y[1],y[2],y[3],y[4])
[1] "as dfg hjk l"
> # 连接的自变量可以使向量。自变量可以使数值变量,连接时自动转换成适当的字符串
> labs<-paste("X",1:6,sep="");labs
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> # 分隔用的字符可以用 sep 参数指定。
> labs<-paste("X",1:6,sep='');labs
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> paste("ABC","DEF",sep="-")
[1] "ABC-DEF"
> #paste 函数的另外几种用法
> paste(1:10) # 和下面的命令等同
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
> as.character(1:10)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
> paste("Today is",date())
[1] "Today is Wed Jan 20 14:34:57 2010"
> paste(c('a','b'),collapse='.')
[1] "a.b"
> # 复数向量,一般格式 34+8i,complex() 函数生成复数向量
> x<-seq(-pi,pi,by=pi/10)
> y<-sin(x)
> z<-complex(re=x,im=y)
> plot(z)
> lines(z)
> #lines() 的作用是用实线连接散点图 , 所作复数 z=x+isinx
> # 对于复数运算 ,Re() 计算复数的实部 ,Im() 计算复数的虚部 ,Mod() 计算复数的模
> #Arg() 计算复数的幅角
> # 向量下标运算
> x<-c(4,5,6,7,8)
> x[3]
[1] 6
> # 可改变单独或多个元素的值
> x[c(1,3)]<-c(777,77777)
> x
[1] 777 5 77777 7 8
> # 逻辑向量 , 设 v 和 x 为等长的逻辑向量 ,x[v] 表示取出所有 v 为真值的元素
> x<-c(2,5,8)
> x<6
[1] TRUE TRUE FALSE
> x[x<6]
[1] 2 5
> # 可以将向量中的缺失数据赋值
> z<-c(-1,1,2,3,NA)
> z[is.na(z)]<-77777
> z
[1] -1 1 2 3 77777
> # 也可以替换非缺失数据的值
> z<-c(-1,1:3,NA)
> y<-z[!is.na(z)]
> y
[1] -1 1 2 3
> z
[1] -1 1 2 3 NA
> # 或作相应的运算
> (z+1)[(!is.na(z)&z>0)]->x
> x
[1] 2 3 4
> (z+6)[(!is.na(z)&z>0)]->x
> x
[1] 7 8 9
> # 定义向量的分段函数
> # 例如 ,x<0 时 y=1-x;x>=0 时 y=1+x
> y<-numeric(length(x))
> y[x<0]<-1-x[x<0]
> y[x>=0]<-1+x[x>=0]
> #numeric 函数的功能是产生数值型向量
> # 下标的正整数运算
> v<-10:20;v
[1] 10 11 12 13 14 15 16 17 18 19 20
> v[c(1,3,5,9)]
[1] 10 12 14 18
> v[1:5]
[1] 10 11 12 13 14
> v[c(1,2,3,2,1)]
[1] 10 11 12 11 10
> c("a","b","c")[rep(c(2,1,3),times=4)]
[1] "b" "a" "c" "b" "a" "c" "b" "a" "c" "b" "a" "c"
> # 下标的负整数运算
> v[-(1:5)]
[1] 15 16 17 18 19 20
> v[-1]
[1] 11 12 13 14 15 16 17 18 19 20
> v[-2]
[1] 10 12 13 14 15 16 17 18 19 20
> # 表示扣除负号后面的数字所代表的下标的元素的运算
> # 取字符型值的下标向量
> age<-c(zhao=23,qian=43,sun=32,li=34);age
zhao qian sun li
23 43 32 34
> age["sun"]
sun
32
> fruit<-c(5,12,3,7)
> names(fruit)<-c("banana","orange","apple","peach")
> fruit
banana orange apple peach
5 12 3 7