栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > R语言

R语言——向量的多种操作方法

R语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

R语言——向量的多种操作方法

冒号运算符:创建从某个数到另一个数的数字序列。

8.5:4.5
#8.5 7.5 6.5 5.5 4.5

c函数:拼接数值和向量,来创建更长的向量。

c(17,6:8,c(1,3),7)
#17 6 7 8 1 3 7

vector函数能创建一个指定类型和长度的矢量。其结果中的值可为0、FALSE、空字符串、或任何相当于“nothing”的类型。例:

vector("numeric",5)
#0 0 0 0 0
vector("complex",5)
#0+0i 0+0i 0+0i 0+0i 0+0i
vector("logical",5)
#FALSE FALSE FALSE FALSE FALSE
vector("character",5)
#'' '' '' '' ''
vector("list",5)
#1.NULL
#2.NULL
#3.NULL
#4.NULL
#5.NULL

为方便起见,可以用每个类型的包装(wrapper)函数来创建矢量,这样可以节约打字时间,与上述代码的命令是等价的。

numeric(5)
#0 0 0 0 0
complex(5)
#0+0i 0+0i 0+0i 0+0i 0+0i
logical(5)
#FALSE FALSE FALSE FALSE FALSE
character(5)
#'' '' '' '' ''
list(5)
#1.5
###list函数的工作方式与它们不一样

序列
seq函数能以许多不同的方式指定序列。

  • seq.int可创建一个序列,序列的范围有两个数字指定,原理与冒号运算符完全相同:
seq.int(1,10)
#1 2 3 4 5 6 7 8 9 10
  • seq.int也可以指定步长,而冒号运算符不能:
seq.int(1,20,2)
#1 3 5 7 9 11 13 15 17 19
seq.int(10,1,-1)
#10 9 8 7 6 5 4 3 2 1
  • seq_len函数将创建一个从1到它的输入值的序列,特别地,当输入值为0时,结果和预期的不一样:
n <- 5
seq_len(n)
#1 2 3 4 5
n <- 0
1:n
seq_len(n)
#1 0
  • seq_along函数创建一个从1开始,长度为其输入值的序列:
d <-c("one","two","three","four","five","sex","seven","eight","nine","ten")
for(i in seq_along(d)) print(d[i])
#[1] "one"
#[1] "two"
#[1] "three"
#[1] "four"
#[1] "five"
#[1] "sex"
#[1] "seven"
#[1] "eight"
#[1] "nine"
#[1] "ten"

长度
所有的向量都有一个长度,向量的长度是一个非负整数(向量的长度可以为0),可以通过length函数查找,缺失值也会被计入长度:

length(5:13)
# 9
length(c(TRUE,FALSE,NA))
# 3

特别要强调的是字符向量,它的长度为字符串的数目,而非每个字符串中字符数的长度。如果要输出每个字符串中字符数的长度,可使用nchar:

e <- c("culture","forest","calculator","push")
length(e)
# 4
nchar(e)
#7 6 10 4

我们也可以为向量重新分配一个长度,如果向量的长度缩短,那么后面的值将被删除,如果长度增加,则缺失值会添加到最后:

f <- c(1,0,3,2,0,1,3,2)
length(f) <- 4
f
#1 0 3 2
length(f) <- 7
f
#1 0 3 2   

命名
R向量的一大特性是能给每个元素命名。使用name=value的形式在创建向量时为其指定名称。如果元素的名称是有效的,则无需被引号括起来。

  • 只命名向量中的某些元素而忽略其他元素:
c(red = 1,green = 2,"blue black" = 3,4)
#red         1
#green       2
#blue black  3
#4           4
  • 也可以在向量创建后用names函数为元素添加名字:
x <- 1:4
names(x) <- c("red","green","blue black"," ")
x
#red         1
#green       2
#blue black  3
#            4
  • names函数也可用于取得向量的名称:
names(x)
#'red' 'green' 'blue black' ' '
  • 如果向量中没有一个元素有名字,则names函数返回NULL:
names(1:4)
#NULL

索引向量
索引是指访问向量中的部分或个别元素,通常用方括号来实现(有人也称之为子集、下标或切片)。R系统非常灵活,有如下多种索引方法:

  • 给向量传入正数,它会返回此位置上的向量元素切片。它的第一个位置是1 (而不像其他某些语言一样是0)。
  • 给向量传入负数,它会返回一个向量切片,它将包含除了这些位置以外的所有元素。
  • 给向量传入一个逻辑向量,它会返回一个向量切片,里面只包含索引为TRUE的元素。
  • 对于已命名的向量,给向量传人命名的字符向量,将会返回向量中包含这些名字的元素切片。
    例:
x <- (1:6) * 2
x
#2 4 6 8 10 12

以下三种索引方法对x进行索引都将返回相同的值:

x[c(2,4,6)]
x[c(-1,-3,-5)]
x[c(FALSE,TRUE,FALSE,TRUE,FALSE,TRUE)]
#4 8 12
#4 8 12
#4 8 12

如果给元素命名,也能返回和上面代码相同的值:

names(x) <- c("two","four","six","eight","ten","twelve")
x[c("four","eight","twelve")]
#four       4
#eight      8
#twelve    12
  • 混合使用正负值会抛出一个错误:
x[c(1,-1)]
#Error in x[c(1, -1)]: 只有负下标里才能有零
#Traceback:
  • 如果使用正数或逻辑值作为下标,缺失索引所对应的值同样也是缺失值:
x[c(2,NA,4,6)]
#four         4
#2           
#eight        8
#twelve      12
x[c(FALSE,TRUE,FALSE,NA,TRUE,FALSE)]
#four         4
#2           
#ten          10
  • 对于负的下标值是不允许存在缺失值的,会抛出一个错误:
x[c(-1,NA)]
#Error in x[c(-1, NA)]: 只有负下标里才能有零
#Traceback:
  • 超出范围的下标值不会报错,而会返回缺失值(NA),实际应用中,最好确保下标值在使用范围内:
x[7]
#NA: 
  • 非整数(不包括分数)下标会默认向0舍入:
x[2.7]
#four: 4
x[-2.7]
#two        2
#six        6
#eight      8
#ten       10
#twelve    12
  • 不传递任何下标值将返回整个向量:
x[]
#two         2
#four        4
#six         6
#eight       8
#ten         10
#twelve      12

which函数将返回逻辑向量中为TRUE的位置,在将逻辑索引切换到整数索引时非常有用:

which(x > 7)
#eight      4
#ten        5
#twelve     6
  • which.min和which.max
which.min(x)
#two: 1
which.max(x)
#twelve: 6

向量循环与重复

  • 一个单独的数字与向量相加,向量的每个元素都会与之相加:
1:6 + 2
#3 4 5 6 7 8
2 + 1:6
#3 4 5 6 7 8
  • 两个长度成倍数的向量相加时,R会循环较短的向量配合较长的相加,向量长度不成倍数时,会出现一个警告:
1:6 + 7:12
#8 10 12 14 16 18
1:6 + 7:10
#Warning message in 1:6 + 7:10:
#"长的对象长度不是短的对象长度的整倍数"
#8 10 12 14 12 14

rep函数能重复使用元素来创建矢量:

rep(1:6,2)
#1 2 3 4 5 6 1 2 3 4 5 6
rep(1:6,each = 2)
#1 1 2 2 3 3 4 4 5 5 6 6
rep(1:6,times = 1:6)
#1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6
rep(1:6,length.out = 10)
#1 2 3 4 5 6 1 2 3 4
rep.int(1:6,2)    #同rep(1:6,2)一样
#1 2 3 4 5 6 1 2 3 4 5 6

rep_len函数可指定输出向量的长度:

rep_len(1:6,17)
#1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号