向量是科雷傲语言最基本的数据类型,三、获取向量的长量

> c(1,2,"a")
[1] "1" "2" "a"
> c(1,2,list(a=3,b=4))
[[1]]
[1] 1

[[2]]
[1] 2

$a
[1] 3

$b
[1] 4

> c(1,2,c(3.1,4))
[1] 1.0 2.0 3.1 4.0
> 

rep重复向量常数

rep(8, 4)
[1] 8 8 8 8

rep(1:3, 2)
[1] 1 2 3 1 2 3

rep(1:3, each=2)
[1] 1 1 2 2 3 3

当对向量使用subset函数时,它与常见的筛选方法的分别在于处理NA值的办法上,能够活动移除NA值

筛选出x瓜月素平方大于五的

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

mode(x)    #r语言中变量类型称为情势(mode)。[1] “numeric”

> #插入向量元素
> x <- c(88,5,12,13)
> x
[1] 88  5 12 13
> x <- c(x[1:3],168,x[4]) #插入168数字在13之前
> x
[1]  88   5  12 168  13
> 

给向量成分命名names()

> workdays <- 1:5
> names(workdays) <- c(“mon”, “tue”, “wed”, “thu”, “fri”)
> workdays
mon tue wed thu fri
  1   2   3   4   5

能够用名称来引用成分
> workdays[“wed”]
wed
  3

> m <- matrix(c(1,2,3,4),nrow = 2,byrow = T)
> m
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> m + 10:13
     [,1] [,2]
[1,]   11   14
[2,]   14   17
> 

 

  等同于下列代码:

向量化的ifelse()

> x <- c(5, 2, -3, 9, 1)
> ifelse(x>3, 2*x, 3*x)
[1] 10  6 -9 18  3

    图片 1

冒号运算符

1:4    
#汉兰达是壹种函数式语言,冒号也是一种运算符(实际上这是一种中置运算符的表示法),能够发生系列。[1]
1 2 3 4

“:”(1, 4)  
 #与1:肆是等价的,用引号引起来,正是一种函数名了,可是那种写法看上去比一:四古怪多了

5:1 #结果:[1] 5 4 3 2 1

1:10 – 1 #冒号的事先级比加减运算要高,实际上正是(壹:拾) – 一,结果:
[1] 0 1 2 3 4 5 6 7 8 9
1:(10-1) #结果:[1] 1 2 3 4 5 6 7 8 9

>#第一种方法 由于1:length(x)=(1,0),实际上做了两次迭代
> first1
function(x){
for(i in 1:length(x)){
    if (x[i]==1) break
}
return(i)
}
> y
[1] 1 2 3 4 5 6 7 8
> first1(y)
[1] 1
> 

>#第二种方法 用seq函数生成等差序列,元素间隔为1,解决了第一种效率不高的方法
> first2 <- function(x){
+     for(i in seq(x)){
+         if (x[i]==1) break
+     }
+     return(i)
+ }
> 
> first2(y)
[1] 1
> 

取模运算%%

c(7,8,9) %% 3  #结果:[1] 1 2 0

在卡宴中NA表示:缺点和失误值;NULL表示:不存在的值(而不是存在但未知的值)

typeof(x)    #翻看向量里的成分的品类,注意默许是double。[1] “double”

在奥迪Q5中会自动跳过NULL值,在LX570中NULL是壹种特有对象,未有项目,可用于变量的初阶化值

x <- c(88,NA,12,168,13) x [1] 88 NA 12 168 13 mean(x) [1] NA

在奇骏中NULL是一种独特指标,未有项目

x <- NULL mode(x) [1] "NULL" x NULL

推断向量是不是等于

> x <- 1:3
> y <- c(1,3,4)
> all(x==y)
[1] FALSE
> identical(x,y)
[1] FALSE

注意一:3是整数,c(1,二,叁)是浮点数,它们不等于:
> identical(1:3, c(1,2,3))
[1] FALSE
> typeof(1:3)
[1] “integer”
> typeof(c(1,2,3))
[1] “double”

  

筛选filtering

有点像索引,因为也是投身[]里,能够把满足一定原则的成分抽出来。

> z <- 1:10
> z
[1]  1  2  3  4  5  6  7  8  9 10

> z[z%%2==0]
[1]  2  4  6  8 10

> z%%2    #取模
[1] 1 0 1 0 1 0 1 0 1 0

> z%%2==0    #注意那里的0被自动循环补齐
[1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE

> x<-c(1,3,5,6,9)
> x[x>3] <- 0   #把超越三的数值都置为0
> x
[1] 1 3 0 0 0

subset也是筛选,差距在于处理NA的不二诀窍上
> x<-c(1,2,NA,4,5)
> x[x>3]
[1] NA  4  5
> subset(x, x>3)    #自行把NA剔除掉了
[1] 4 5

which()能够找到满足条件的成分的岗位
> x <- c(5,  2,  -3, 9, 1)
> x[x*x>8]
[1]  5 -3  9
> which(x*x>8)
[1] 1 3 4

  

单个数值(标量)其实远非单独的数据类型,它只可是是唯有叁个因素的向量。

  #矩阵

奥德赛不供给提前表明变量,大小写敏感,数组是从1伊始。

在向量中提取餍足一定条件的要素,再次来到值是因素的各州的岗位。 style=”color: #000000; line-height: 一.五;”> 

x
[1] 6 1 2 3 NA 12
which(x>5)
[一] 1 陆 #重临元素位置x[which(x>5)]
[1] 6 12

seq()成立向量

seq(from=12, to=30, by=3)    # 也得以写成: seq(1二,30,叁)
[1] 12 15 18 21 24 27 30

seq(from=1.1, to=2, length=10)
[1] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0

x <- c(1,2,4,8)
seq(x)
[1] 1 2 3 4

seq(一,伍)与一:5是3个乐趣

  #接纳函数which()

x <- c(x[1:3], 88, x[4])  
#在结尾一个数前面插入三个数值8八,能够见到用x[4]能够抽取第陆个成分,用x[1:3]能够抽取前一个要素

    # >运算符
 >函数分别使用在u[1]和v[1]得到结果TRUE,然后u[2]和v[2]获取结果FALSE。。。

循环补齐recycle

那种性子在任何语言中此前还尚未看见过!超强的向量运算成效!

y <- c(1,2,3) + 4     #
单个的数值四会被补齐为c(四,四,4),最后结果为c(伍,陆,7)

c(1,2,3) * c(4,5,6)   # 结果:[1]  四 101八,那里代表的三个向量中的成分分别相乘,假使想求向量的点积(dot
prod),就须要用这么些%*%函数了

c(1,2,3) %*% c(4,5,6)  #结果是2个1×1的矩阵,在那之中唯有二个要素1肆

c(1,2,3) * c(4,5,6,7) #结果:[1]  肆 10 18 
七。同时提交通警务人员告消息:长的靶子长度不是短的靶子长度的整倍数

 

NA与NULL

在计算进度中,平常会碰着缺失值,称为NA,即Not Available。

Sportage语言中大多函数可以忽略NA值。

> x <- c(1,2,NA,4)
> mean(x)  #有缺点和失误值,十分的小概测算平均值
[1] NA

> mean(x, na.rm=TRUE) #忽略NA值
[1] 2.333333

> mean(c(1,2,NULL,4))   # NULL值会自动略过
[1] 2.333333

> length(c(1,2,NA,4))    #总括个数时NA被总结在内
[1] 4

> length(c(1,2,NULL,4))
[1] 3

三、获取向量的长量

向量化

w <- function(x) return (x+1)  
#加号运算符援救向量,所以自定义的函数w也是向量化的!看上去大概的x+一,但大家早已写出了1个向量函数

w(1) #这是大家最熟悉的函数调用
[1] 2

w(c(1,3,5)) #能够对向量进行演算
[1] 2 4 6

> u <- c(5,2,8)
> v <- c(1,3,9)
> u > v
[1]  TRUE FALSE FALSE
> 

x <- c(1, 2, 4, 9)

  参照:百度百科-等比数列

向量是CR-V语言最大旨的数据类型。

  #any(x > 8)  all(x >
八),分解,先实施上边运算,获得种种成分的逻辑值,any只要决断只要有一个为TRUE,其归来结果为:TRUE,不然为FALSE。all则相反,全体为TRUE时重返值才为:TRUE,否则为FALSE。

向量索引

壹般说来的语言中索引只好是正整数,但那里的目录能够是向量,还足以是负数。严峻说来那无法叫索引,而是筛选操作,看前边的filtering

x <- c(1,3,5,7,9)

x[2] #结果:[1] 3

x[c(5,4,3,2,1)]   #结果为:[1] 9 7 5 3 1

x[sample(1:5)]  #把一,三,5,7,九乱序排列,每回运营你会收获三个见仁见智的结果

x[-1] #[1] 三 五 7 玖,把第二个因素除掉,那是本人越发喜欢的语法性情!

x[1:3] #结果:[1] 1 3 5

能够给向量成分随意内定名称,name()函数能够给向量中的元素命名,或询问向量成分的名称,将向量成分的名称赋值为NULL,能够将成分的名目移除

x <- c(1,2,3,4) x [1] 1 2 3 4 names(x) NULL names(x) <- c("a","b","c","d") names(x) [1] "a" "b" "c" "d" x a b c d 1 2 3 4 names(x) <- NULL x [1] 1 2 3 4 names(x) NULL

all()和any()

x<-(1:10)
any(x>8) #万向来量中有贰个不止八,就回到真
[1] TRUE
all(x>8) #富有都不止8,才回到真
[1] FALSE

14、NA与NULL值

length(x)  #获得向量的长度

 

15、筛选

> x>8
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
[10]  TRUE
> 

 

7、常用的向量运算  包含算术和逻辑运算、向量索引、创造向量等

1玖、c()函数扩张

> x <- 1:10
> any(x>8)
[1] TRUE
> all(x>8)
[1] FALSE
> any(x>20)
[1] FALSE
> all(x>20)
[1] FALSE
> 

  #向量输入、向量输出  

    #函数  平方根、对数、三角函数等都是向量化的

1壹、使用 rep()重复向量常数
 能够把同一常数位居长向量中,rep(x,times)即开立times*length(x)个要素向量,那个向量是x重复times次构成

 

 

    #matrix()
 在z1二函数中重返值正是一个八元向量(即出口结果是多个数组成的向量),供给通过matrix函数转变到矩阵,如以下代码,将结果转变到捌*2的矩阵

 

> c(1,2,4,1,2) + c(6,0,9,20,22)
[1]  7  2 13 21 24
> 

当传递到c()函数中的参数有例外门类时,则会被降职为同一档次,该类型最大限度地保存它们的同台的性状。各样类型的先期级排序是:NULL<raw<逻辑类型<整型<实数类型<复数类型<列表<表明式(把配对列表(pairlist)当作普通列表) 

> #获取向量的长量
> x
[1]  88   5 168  13
> length(x)
[1] 4
> 

 

  #用seq()成立向量

#加法
> 2+3
[1] 5
> "+"(2,3)
[1] 5
>
>c(1,2) + c(3,4)
>[1] 4  6
>
> "+"(2,3,4)
Error in `+`(2, 3, 4) : operator needs one or two arguments

>#乘法
> c(1,2) * c(3,4)
[1] 3 8
>#减法
> c(3,4) - c(1,2)
[1] 2 2
>#除法
> c(3,4) / c(1,2)
[1] 3 2
>#取余
> c(3,4) %% c(2,3)
[1] 1 1
> 
> x <- rep(8,4)
> x
[1] 8 8 8 8
> rep(c(5,12,13),3)
[1]  5 12 13  5 12 13  5 12 13
> rep(1:3,2)
[1] 1 2 3 1 2 3
> 

1二、使用all()和any()
 这七个函数分别推断其参数中是或不是至少有叁个或任何为TRUE

> 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) :
  longer object length is not a multiple of shorter object length
> 
> x <- matrix(c(1,2,3,4,5,6),nrow = 3)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> x + c(1,2)
     [,1] [,2]
[1,]    2    6
[2,]    4    6
[3,]    4    8
> 

  相当于:

    #sapply()
 该函数跟matrix功效雷同,在此处转换来的是二*8的矩阵,其余参数将来再上学

  #NULL

  #NA

> x <- matrix(c(1,2,3,4,5,6),nrow = 3)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> y <- matrix(c(1,2,1,2,1,2),nrow = 3)
> y
     [,1] [,2]
[1,]    1    2
[2,]    2    1
[3,]    1    2
> x +y
     [,1] [,2]
[1,]    2    6
[2,]    4    6
[3,]    4    8
> 

  #等比数列定义图片 2

>#要求R提取z中平方大于8的元素
>z <- c(5,2,-3,8)
> z
[1]  5  2 -3  8
> w <- z[z*z > 8]
> w
[1]  5 -3  8
>
> #等同于以下分解代码
>
> z <- c(5,2,-3,8)
> z
[1]  5  2 -3  8
> z*z > 8
[1]  TRUE FALSE  TRUE  TRUE
> z[c(TRUE,FALSE,TRUE,TRUE)]
[1]  5 -3  8
> 
>j <- z*z > 8
>z[j]
>[1]  5 -3  8
> 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
[7] 2.645751 2.828427 3.000000
>
> rep(c(5,12,13),each=2)
[1]  5  5 12 12 13 13
> 

在此地2x贰的矩阵m中蕴藏为贰个4元向量,即(壹,二,三,四),并且以存款和储蓄为两行(默许是以列排序,以行排序加上byrow
= T),然后对它丰富(拾,1一,1二,一叁),得最新的矩阵,等效于上面代码

”==“仅对向量成分的值举行相比,identical()函数不仅比较成分的值还相比向量成分的数据类型,正如它字面意思同样必须完全一样,从上边包车型地铁代码能够见见,:产生的要素是整数,c()产生的是浮点数

x <- 1:2 y <-c(1,2) x==y [1] TRUE TRUE identical(x,y) [1] FALSE typeof(x) [1] "integer" typeof(y) [1] "double"

> 5:8
[1] 5 6 7 8
> #注意运算符优先级别的问题
> i <- 5
> 1:i-1   #这个运算的意思是 (1:i)-1,不是1:(i-1)
[1] 0 1 2 3 4
> 1:(i-1)
[1] 1 2 3 4
> #查看运算符的优先级别
>?Syntax  #可以在R帮助文档中查看

九、用运算符创制向量

  向量化运算固然过运算符的(+,-,*,/,%%,>等),若是3个函数中央银行使了运算符,哪么那些函数就被向量化了,那样能够有效增长速度

一、插入向量元素,同一直量中的全数的要素必须是一模同样的格局(数据类型),如整型、数值型(浮点数)、字符型(字符串)、逻辑型、复数型等。查看变量的种类能够用typeof(x)函数查询。

8、向量索引  
陆风X第88中学最要害也是最常的一个运算符正是索引,使用它来摘取给定向量中一定索引的要从来组合子向量。索引向量的格式是
X[Y](X,Y均是向量),它回到的结果是,X中索引为Y的这几个成分。  

突显奥迪Q3函数式语言特征的另一特点是“筛选”(filtering),大家得以领到向量中级知识分子足一定原则的成分。  

  #each参数,与times参数分歧的是,它钦命x交替重复的次数

#用例:将x向量中兼有大于>3的因素,替换为 0。 style=”color: #000000; line-height: 一.伍;”> 

x <- c(1,3,6,2,20) x [1] 1 3 6 2 20 x[x > 3] <- 0 x [1] 1 3 0 2 0

> #删除向量中的元素 ^_^
> x
[1]  88   5  12 168  13
> x <- c(88,5,168,13)
> x
[1]  88   5 168  13
> 
> y <- c(1.2,3.9,0.4,0.12)
> y
[1] 1.20 3.90 0.40 0.12
> y[2:3] #取Y向量中的2-3元素
[1] 3.9 0.4
> v <- 3:4
> y[v]
[1] 0.40 0.12
> y[c(1,1,3)] #提取的元素是可以重复的
[1] 1.2 1.2 0.4
> 

1八、向量的名目

> seq(1:8)
[1] 1 2 3 4 5 6 7 8
> 1:8 #等同于以上代码
[1] 1 2 3 4 5 6 7 8
> seq(from=5,to=20, by=3)  #生成从5-20,且元素间隔为3
[1]  5  8 11 14 17 20
> seq(from=5,to=10, by=0.1) #生成从5-10,且元素间隔为0.1
 [1]  5.0  5.1  5.2  5.3  5.4  5.5  5.6  5.7  5.8  5.9  6.0  6.1  6.2
[14]  6.3  6.4  6.5  6.6  6.7  6.8  6.9  7.0  7.1  7.2  7.3  7.4  7.5
[27]  7.6  7.7  7.8  7.9  8.0  8.1  8.2  8.3  8.4  8.5  8.6  8.7  8.8
[40]  8.9  9.0  9.1  9.2  9.3  9.4  9.5  9.6  9.7  9.8  9.9 10.0
> 

> seq(from =1.1, to=2, length=10)
 [1] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
> seq(from =1.1, to=2, length=20)  #生成1.1到2,共20个等比数列,常数为0.047368
 [1] 1.100000 1.147368 1.194737 1.242105 1.289474 1.336842 1.384211
 [8] 1.431579 1.478947 1.526316 1.573684 1.621053 1.668421 1.715789
[15] 1.763158 1.810526 1.857895 1.905263 1.952632 2.000000
> 

  #负数的下标代表我们想剔除的因素,其它提抽出来

  #卡宴是一种函数式语言,它的各样运处符(+ – * / 。。。)实际上都以函数

 6、循环补齐
 在对八个向量使用运算符时,假如需求那三个向量具备同样的尺寸,Tucson会自动循环补齐(recycle),即重复较短的向量,直到它与另1个向量长度相相称

  #矩阵循环补齐

> m <- matrix(c(1,3,2,4),nrow = 2)
> m
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> m + 10:13
     [,1] [,2]
[1,]   11   14
[2,]   14   17
> 
> sapply(1:8,z12)
     [,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
> 

  #用 :能生成内定范围内数值构成的向量

  #行使subset()函数筛选

在牧马人语言中除去有“if-else”结构,还提供了另一个向量货的版本,ifelse()函数,格式为:ifelse(条件,为TRUE再次回到向量,为FALSE再次回到向量)

x <- 1:10 y <- ifelse(x %% 2 == 0,5,12)#对x值取模运算,偶数重临五,奇数再次回到1二y [1] 12 5 12 5 12 5 12 5 12 5

 补充c(1,2,list(a=3,b=4))

x<-c(1,2,list(a=3,b=4)) x [[1]] [1] 1

1陆、向量化的ifelse()函数

壹三、向量化运算符

一7、测试向量相等

凯雷德语言最核心的数据类型-向量(vector)

  #向量输入、矩阵输出

> z12 <- function(z) return(c(z,z^2))
> x <- 1:8
> z12(x)
 [1]  1  2  3  4  5  6  7  8  1  4  9 16 25 36 49 64
> matrix(z12(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
> 
> y
[1] 1.20 3.90 0.40 0.12
> y[-1]  #除第一个元素外,提取其它所有的元素
[1] 3.90 0.40 0.12
> y[-1:-2] #除1:2元素外
[1] 0.40 0.12
> 

由于以下代码中隐含了三个NA元素(缺点和失误值),导致mean()不可能测算均值,不过能够由此参数na.rm
= T(移除NA),总括别的因素的均值。

x <- c(88,NA,12,168,13) x [1] 88 NA 12 168 13 mean(x) [1] NA

NA在不一样的向量中方式(数据类型)也比不上

x <- c(88,NA,12,168,13) x [1] 88 NA 12 168 13 mode(x[2]) [1] "numeric" x1 <- c("a","b",NA) x1 [1] "a" "b" NA mode(x1[3]) [1] "character"

五、向量与数组、矩阵
 数组与矩阵包含列表,在某种意义上实在都是向量。只不过它们还有额外的类属性。如:矩阵有行数和更数等。
 

  #生成筛选索引

 二、删除向量中的成分,由于CRUISER中的向量是接二连三存款和储蓄的,由此不能够插入或删除成分(故上边的插入代码实际上海重机厂新创制了三个新的向量然后将x指向新的向量,类似于C中的指针)

[[2]]
[1] 2

$a
[1] 3

$b
[1] 4

> x[[1]]
[1] 1
> x[[2]]
[1] 2
> x[3][1]
$a
[1] 3

> x[4][1]
$b
[1] 4

> 

 

4、遍历向量里有着的因素

相关文章