#数据结构
#R对象:object,它是指可以赋予给变量的任何事物,包括常量、数据结构、函数,甚至图形。
#对象都拥有某种模式,描述了此对象是如何存储的,以及某个类。
#用来存储数据的对象类型
#1.向量,标量
#2.矩阵
#3.数组
#4.列表
#5.数据框
#6.因子
#7.时间序列
#它们在存储数据的类型、创建方式、结构复杂度以及用于定义和访问其中个别元素等等方面均有所不同
#向量
#vector,R中最重要的一个概念,是构成其他数据结构的基础。
#R中的向量概念与数学中向量是不同的,类似于数学上的集合的概念,由一个或多个元素所构成。
#是用于存储数值型、字符型或逻辑型数据的一维数组。
#用函数c来创建向量。
#c代表concatenate连接,也可以理解为收集collect,或者合并combine。
#向量的数据结构
euro #欧元汇率,长度为11,每个元素都有命名
landmasses #48个陆地的面积,每个都有命名
precip #长度为70的命名向量
rivers #北美141条河流长度
state.abb #美国50个州的双字母缩写
state.area #美国50个州的面积
state.name #美国50个州的全称
#定义x变量
#<- 赋值操作符
#c 函数
#, 不同元素之间用,来分隔
x<-c(1,2,3,4,5)
#这就定义好了一个向量,也可以说是对象x
#接下来在终端直接敲x就可以输出这个变量的内容
x
#这里是自动调用了print函数来打印变量的内容
print(x)
#print可以省略
#向量中的元素可以是数值型、字符串型或者逻辑型
y<-c("one","two","three")
y
##字符串一定要加"",新手常见错误,不加引号会提示对象找不到
##搜索包的时候,包的名字一定要加""
#因为R中如果不加"",就会把这些字符串当做对象
#例如变量或者函数,去整个软件中搜索,如果搜索不到,就会提示对象找不到
#ex
#不加引号R会把字符串当内部人,加引号表示字符串是外部的
#字符串之间有空格或逗号
y<-c("one","two",hello,wold)
y<-c("one","two","hello,wold")
y
#定义一个变量z为逻辑型,逻辑型向量包括true或false,用于条件判断中
#在R中,用到逻辑型向量全部大写,也可以简写成T或F
#逻辑型向量不用加引号
z<-c(TRUE,T,F)
z
#但不能使用首字母大写模式
z<-c(True,T,F)
#这种模式就不是逻辑型了,会被当成字符串,必须加上引号
#可以用一些快捷方式来构建向量
# : 可以用来构建等差数列
c(1:100)
#使用seq函数调整等差差值
#参数from为起始值
#参数to为终止值
seq(from=1,to=100)
#生成从1到100的向量
#参数by设置等差值
seq(from=1,to=100,by=2)
#参数length.out用来控制输出的个数
seq(from=1,to=100,length.out=10)
#rep函数生成重复序列
?rep
rep(2,5)
rep(x,5)
rep(x,each=5)
rep(x,each=5,times=2)
#向量特点:所有的元素必须是同一类型
#都是数字型,都是字符串型、逻辑型,不能混合
a<-c(1,2,"one")
a
#敲一下a,打印出内容
#所有的元素都带上""
#说明数值型被转换成字符串型变量了
#可以使用mode或者type.out查看向量类型
mode(a)
#显示为"character"#字符串型
#"logical"逻辑型
#为什么向量必须是同一类型呢
#因为只有同一类型才可以进行计算,不是同一类型很难处理
#如果向量中只有一个元素,也可以不加c函数,直接赋值
a=2
b=3
c="Hello,World"
d=TRUE
#这种向量也称为 标量
#这和其他编程语言类似
#例如:Per里面的最基础的就是标量,只用来存储一个值
a,b,c,d
#Error: unexpected ',' in "a,"
a;b;c;d;
#向量是R与其它编程语言非常大的一个不同
#其他编程语言中没有向量
#R中最基础的数据结构是一个集合,而不是一个标量
#这种被称为向量化编程
#为什么R中要是用向量化编程呢?
#因为R是统计软件,它的作用是统计学家,而不是计算机科学家
#向量化编程有非常多的好处
#例:两个集合
x<-c(1,2,3,4,5)
y<-c(6,7,8,9,10)
#现将x集合中每个元素扩大一倍,与y集合对应的数值相加
#一般编程语言这样处理
1*2+6
#向量化编程这样处理
x*2+y
#这样就出来结果了,非常方便
#矩阵运算,用循环来编程,就更复杂了;向量化编程还是非常方便
#向量化编程是R的精髓所在,也是R与其他编程语言最大的不同
#向量化编程在统计中具有非常高的效率
#最大的优势是避免使用循环
#从x向量中取出大于3的值
# x(x>3)
#Error in x(x > 3) : could not find function "x"
x[x>3]
#一下就完成了,不需要使用循环一个一个来判断
#始终不能忘记R是统计学软件,处理的就是一大堆的数字,不是单独的几个数字
#所以最基础的数据结构就是向量,而不是几个数字,所以要采用向量化的编程
#在R中会有大量地方可以用到向量
rep(x,c(2,4,6,1,3))
#用来分别控制x向量中每个元素循环的次数
#这样就按照向量中的设定来进行重复,非常高效