本文含有:

向量的创建与运算

两个方便创建向量的函数:rep()与seq()

如何访问向量中的元素

首先先明白几个要点:

R区分大小写,向量A和向量a是两个不同的向量;

R可以识别负数,如5+-2可以输出结果3

R是计数时是1-base,也就是说R中的1就代表第一个数,而其他语言有可能第一个数用0来表示。

R的赋值符号可以是“

1. 向量的创建与运算

创建一个向量

> l

> l

[1] 2 2 1 3 8

创建一个1至5的向量,“:”表示“至”,“1:5”则表示从1到5的5个整数。

> n

> n

[1] 1 2 3 4 5

也可以用函数vector(length=)创建向量。创建的向量初始默认为逻辑值FALSE

> v

> v

[1] FALSE FALSE FALSE FALSE

切片运算(这也是访问向量的一种方式)

注意R中的序号1就表示第1个,而不是2个,要与python相区别

n[1:4]

[1] 1 2 3 4

基本运算

首先肯定是用+, -, *, /这几个运算符号进行的。幂运算使用^,带括号先算括号内的内容。用刚刚创建的n和a列表进行示范:

> a1

> a1

[1] 3 4 4 7 13

> a2

> a2

[1] 2.0000000 1.0000000 0.3333333 0.7500000 1.6000000

a和n是等长的,即向量内元素的个数是一样的,得到的运算结果也是一一对应相运算的结果。若不等长会怎么样呢?

较少元素的向量在运算完一遍以后将会重新对应较多元素的向量中的剩余元素逐个再从头运算一次。这句话比较难理解,看例子:

> n

> l

> a

> a

[1] 1 2 3 4 5 2 4 6 8 10

2.seq函数 - 建立等差数列

建立从2到10,间隔为2的等差数列:

> n

> n

[1] 2 4 6 8 10

如果换成1到11,间隔为2的等差数列会怎么样呢?答案是11会被剔除。

> n

> n

[1] 2 4 6 8 10

3. rep函数 - 元素的重复

两种格式:

rep(起始值:终止值, times = 重复次数)

rep(起始值:终止值, each = 重复次数)

第一种是将整一个向量重复n次;

第二种是将向量的每个元素依次重复n次;

若直接写数字,则是第一种times.

见下面例子:

> x=1:4

> rep(x,2)

[1] 1 2 3 4 1 2 3 4

第一行代码表示把1到4赋值给x,第二行表示把向量x重复2次。当然我们也可以直接写入数字:

> rep(1:4,2)

[1] 1 2 3 4 1 2 3 4

当然,向量可以重复,字符也是可以重复的,但是不要忘记加个引号,例如,如果我们想把字符“male”和“female”各重复10次,那么我们输入下面的代码:

> rep(c("male","female"),each=10)

[1] "male" "male" "male" "male" "male" "male" "male" "male"

[9] "male" "male" "female" "female" "female" "female" "female" "female"

[17] "female" "female" "female" "female"

先用c()函数将“male”和“female”结合成一个向量,each=10是将向量中每一个元素重复10次。如果不写each=10,直接写10,将会是这样的:

> rep(c("male","female"),10)

[1] "male" "female" "male" "female" "male" "female" "male" "female"

[9] "male" "female" "male" "female" "male" "female" "male" "female"

[17] "male" "female" "male" "female"

注意它和前一个代码重复的区别。再强调一次,第一个是将向量中的每一个元素重复十次,第二个是将整个向量重复了10次。

> rep(c(1,2),c(10,10))

[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2

这样写也表示把1,2各重复10次。因此,我们显然可以想到,如果把1,2,3,4分别重复5,6,7,8次,代码一定是这样的:

> rep(c(1,2,3,4),c(5,6,7,8))

[1] 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4

与seq函数一样,rep函数也可以设置长度。

> rep(1:7,3)

[1] 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7

> rep(1:7,3,length.out=18)

[1] 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4

比较这两组代码与结果。第一个表示将1到7重复3次,得出了21个值,第二个表示将1到7重复3次,限制长度为18,所以结果只有18个值。同样,length.out也可以简写为length或len。

当我们在rep中使用each时,还可以使用times:

> rep(c(3,5,7),each=3,times=2)

[1] 3 3 3 5 5 5 7 7 7 3 3 3 5 5 5 7 7 7

代码表示将向量中的每个元素重复三次,再将所得的结果重复2次(结合结果,仔细理解我这句话),“times”即“加倍”的意思。

最后想删除向量x:

rm(x)

4.访问向量中的元素

(1)访问指定位置上的元素

有三种书写格式:

向量名[位置常量]

向量名[位置常量1:位置常量2]

向量名[c(位置常量列表)]

> v

> v

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

> v[1]

> v[2:4]

> v

[1] 1 2 3 4 0 0 0 0 0 0

> w

> v[c(5:9,10)]

> v

[1] 1 2 3 4 5 6 7 8 9 10

这个c(w, 10)的访问方式,可以有效实现多个向量的合并。

(2)利用位置向量访问指定位置上的元素

> v

[1] 1 2 3 4 5 6 7 8 9 10

> w

> v[w]

[1] 2 3 4

要注意这个w的赋值没有用c函数。

除了直接指定位置,也可以利用逻辑型位置向量来访问。

> w

> v[w] # 访问v中位置向量w取值为TRUE位置(即1,4)上的元素

[1] 1 4

(3)访问指定位置之外的元素

加个负号就可以实现

> v[-1] # 访问除了第1个元素以外的元素

[1] 2 3 4 5 6 7 8 9 10

> v[-(2:4)] # 访问除了2~4元素以外的元素

[1] 1 5 6 7 8 9 10

> v[-c(5:9,10)]

[1] 1 2 3 4

如果尝试逻辑型位置向量呢?会出现问题:

> w

[1] TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE

> v[-w]

[1] 2 3 4 5 6 7 8 9 10

本文参考:《R语言数据挖掘》第2版 薛薇 编著

r语言向量代码如何创建函数c,R中向量基本操作:创建、运算、访问相关推荐

  1. R语言survminer包的pairwise_survdiff函数多重比较分组中多个生成曲线的差异并输出p值、使用symnum函数将p值转化为等级表示星号

    R语言survival包的survfit函数拟合生存曲线数据.survminer包的pairwise_survdiff函数多重比较分组中多个生成曲线的差异并输出p值.使用symnum函数将p值转化为等 ...

  2. R语言epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(一维频率表、包含频数的百分比、累积的百分比、使用条形图可视化频数分布)、设置cum.percent参数即使存在缺失值也显示

    R语言使用epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(tab1函数计算数据的一维频率表.包含频数的百分比.累积的百分比.使用条形图可视化频数分布).设置cum.percen ...

  3. R语言epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(一维频率表、频数的百分比、累积的百分比、使用条形图可视化频数分布)、自定义设置cum.percent参数是否显示累积百分比

    R语言使用epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(tab1函数计算数据的一维频率表.包含频数的百分比.累积的百分比.使用条形图可视化频数分布).自定义设置cum.per ...

  4. R语言统计代码运行耗时实战:计算代码运行时间、使用proc.time函数计算代码运行时间

    R语言统计代码运行耗时实战:计算代码运行时间.使用proc.time函数计算代码运行时间 目录

  5. R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量、将异常离散编码转化为NA值

    R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量.将异常离散编码转化为NA值 目录

  6. predict函数 R_学习|R语言做机器学习的常用函数总结

    预测函数:predict() type="prob"判别该量度的昆虫归类为A.B和C的概率:type="response":判别该量度的昆虫的类别: 预测分类的 ...

  7. R语言编写代码的方式

    大部分的代码都是基于控制台的交互式操作,但是对于那些要重复好多次的程序片段,将其保存为一段R程序文件是一个不错的选择.通常,R程序以ASCII格式保存,扩展名为".R". 可以在类 ...

  8. R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象

    R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象 目录 R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象 #data.t ...

  9. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(添加箱图、带缺口的小提琴图、小提琴图)实战

    R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(添加箱图.带缺口的小提琴图.小提琴图)实战 目录 R语言使用ggplot2包geom_jit ...

  10. R语言可视化、编写自定义函数可视化水平排序条形图(horizontal bar plot)、自定义图像布局模仿经济学人杂志可视化效果、右侧添加标签数值图像方框、自定义背景色、水平条形图中间线条等

    R语言可视化.编写自定义函数可视化水平排序条形图(horizontal bar plot).自定义图像布局模仿经济学人杂志可视化效果.右侧添加标签数值图像方框.自定义背景色.水平条形图中间线条.网格线 ...

最新文章

  1. LG30刷小米系统_华为手机适合刷小米系统吗?
  2. 作为公司新上任的管理者,如何更好的规划工作方案
  3. 数字基带传输与码间干扰
  4. 人生第一个快速幂的题(HDU - 1097--A hard puzzle )
  5. python和linux哪个难学-“慢”下来的 Python 要怎么竞争?
  6. CF1010F Tree
  7. 白盒测试工具 - sonar的安装、配置与使用入门手册,用sonar检查代码质量实战演示
  8. boost::contract模块实现customer and manager的测试程序
  9. 福大软工 · BETA 版冲刺前准备(团队)
  10. 局域网中设备的管理之StackCluster
  11. python 公众号菜单_Python脚本--微信公众号自定义菜单的创建及获取
  12. xcode 4.2下怎么添加framework?
  13. [book] iOS 8 Swift Programming Cookbook
  14. Echarts地图,省市区县,行政代码及地图坐标
  15. 机器学习期末复习题题库-单项选择题
  16. python中返回上一步操作的快捷键_在计算机中返回上一步的快捷键
  17. 微信开放平台扫码登录
  18. WIN10+ubuntu16.04双系统卸载重装
  19. 绚丽的魔兽世界,广袤的艾泽拉斯大陆
  20. AndroidApp之图书管理系统(一)

热门文章

  1. goahead content-length为0时的问题
  2. 好好学python · 你真的会列表吗(列表推导式质检员)
  3. [MetalKit]34-Working-with-memory-in-Metal内存管理
  4. 渗透攻击(NT/2000系统)
  5. 裁员这件事,谁也没有鲍尔默、纳德拉这两届微软CEO演绎的淋漓尽致
  6. 虚拟化方面包含了主机、存储和网络
  7. 删除git commit 的 UserInterfaceState.xcuserstate 文件
  8. Java大神推荐,java编程基础必备(必看)
  9. ThinkPhp学习13
  10. 学习参数传递及const成员变量初始化