R语言最基本的数据类型是向量(Vector)。R语言中单个数值(标量)没有单独的数据类型,它只不过是向量的一种特例。另一方面,R语言中矩阵是向量的一种特例。
循环补齐:在一定情况下自动延长向量。
筛选:提取向量子集。
向量化:对向量的每一个元素应用函数。
这些运算是R语言的核心。
R语言中变量类型称为模式(mode)。同一向量中的所有元素必须是相同的模式。可以调用函数typeof()进行查询。
与C语言类似,R中向量是连续存储的,因此不能插入或删除元素,而这跟Python语言中的数组不同。
> x <- c(88,5,12,13)
> x
[1] 88 5 12 13
> x<-c(x[1:3],168,x[4])# insert 168 before the 13
> x
[1] 88 5 12 168 13
>
> length(x)
[1] 5
>
> m=rbind(c(1,2),c(3,4))
> m
[,1] [,2]
[1,] 1 2
[2,] 3 4
> m+1:4
[,1] [,2]
[1,] 2 5
[2,] 5 8
>
> y<-vector(length=2)
> y[1]<-5
> y[2]<-8
> y[1]
[1] 5
> y
[1] 5 8
> typeof(y)
[1] "double"
> mode(y)
[1] "numeric"
>
> c(1,2,4)+c(6,0,9,20,22)
[1] 7 2 13 21 24
Warning message:
In c(1, 2, 4) + c(6, 0, 9, 20, 22) : 长的对象长度不是短的对象长度的整倍数
> x
[1] 88 5 12 168 13
> m
[,1] [,2]
[1,] 1 2
[2,] 3 4
> m+c(1,2)
[,1] [,2]
[1,] 2 3
[2,] 5 6
>
> 2+3
[1] 5
> "+"(2,3)
[1] 5
> x<-c(1,2,4)
> x+c(5,0,-1)
[1] 6 2 3
> x
[1] 1 2 4
> x*c(5,0,-1)
[1] 5 0 -4
> x/c(5,4,-1)
[1] 0.2 0.5 -4.0
> x%%c(5,4,-1)
[1] 1 2 0
>
错误: 没有"y"这个函数
> y[2:4]
[1] 3.90 0.40 0.12
> v<-3:4
> v
[1] 3 4
> y[v]
[1] 0.40 0.12
> #负数的下标表示我们想把相应的元素剔除
> z <- c(5,12,13)
> z
[1] 5 12 13
> z[-1]
[1] 12 13
> z
[1] 5 12 13
> z[-1:-2]
[1] 13
> z
[1] 5 12 13
> k<-z[-1:-2]
> k
[1] 13
>
> i<-2
> i
[1] 2
> 1:i-1
[1] 0 1
> 1:(i-1)
[1] 1
>
> seq(from=520,to=1680,by=200)
[1] 520 720 920 1120 1320 1520
> seq(from=520,to=1680,by=200.521)
[1] 520.000 720.521 921.042 1121.563 1322.084 1522.605
>
> x<-rep(520,3)
> x
[1] 520 520 520
> print(y<-rep("I love u")
+ )
[1] "I love u"
>
>
> x<-1:10
> x
[1] 1 2 3 4 5 6 7 8 9 10
> any(x>8)
[1] TRUE
> any(x>11)
[1] FALSE
> all(x>10)
[1] FALSE
> all(x>3_
错误: unexpected input in "all(x>3_"
> all(x>3)
[1] FALSE
> all(x<11)
[1] TRUE
>
> u<-c(5,2,8)
> v<-c(1,3,9)
> u>v
[1] TRUE FALSE FALSE
> w<-function(x) return(x+1)
> w(u)
[1] 6 3 9
> sqrt(1:9)
[1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427 3.000000
> y<-c(1.2,3.9,0.4)
> z<-round(y)
> z
[1] 1 4 0
> k<-floor(y)
> k
[1] 1 3 0
>
> z<-function(z) return(c(z,z^2))
> x<-1:8
> x
[1] 1 2 3 4 5 6 7 8
> z(x)
[1] 1 2 3 4 5 6 7 8 1 4 9 16 25 36 49 64
> matrix(z(x),ncol=2)
[,1] [,2]
[1,] 1 1
[2,] 2 4
[3,] 3 9
[4,] 4 16
[5,] 5 25
[6,] 6 36
[7,] 7 49
[8,] 8 64
> sapply(1:8,z)#simplify apply
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 3 4 5 6 7 8
[2,] 1 4 9 16 25 36 49 64
>
> x<-c(88,NA,12,168,13)
> x
[1] 88 NA 12 168 13
> mean(x)
[1] NA
> mean(x,na.rm=TRUE)
[1] 70.25
> y<-c(88,NULL,12,168,13)
> mean(y)
[1] 70.25
>
> z<-c(5,2,-3,8)
> z
[1] 5 2 -3 8
> k<-(z*z>8)
> k
[1] TRUE FALSE TRUE TRUE
> w<-k
> w
[1] TRUE FALSE TRUE TRUE
> w<-z(k)
错误: 没有"z"这个函数
> w<-z[k]
> w
[1] 5 -3 8
> w<-z[z*z>8]
> w
[1] 5 -3 8
>
> x<-c(6,1:3,NA,12)
> x
[1] 6 1 2 3 NA 12
> x[x>5]
[1] 6 NA 12
> subset(x,x>5)
[1] 6 12
>
> z<-c(5,2,-3,8)
> which(z*z>8)
[1] 1 3 4
>
> x<-1:10
> y<-ifelse(x%%2==0,"偶数","奇数")
> y
[1] "奇数" "偶数" "奇数" "偶数" "奇数" "偶数" "奇数" "偶数" "奇数" "偶数"
>