目录
在R语言中赋值采用<-或者=
| a<-4 | 数值类型标量 |
| b<-"hello" | 字符串类型标量 |
| c<-"t" | 字符类型标量 |
| f<-TRUE | 布尔类型标量 |
| is.numeric(a) | 判断a是不是数值型对象 |
| is.character(a) | 判断a是不是字符型对象 |
| s<-as.character(a) | 将a转换成字符串类型赋值给s,a本身的类型不变 |
| a<-as.character(a) | 将a转换成字符串类型赋值给a,a本身类型变成字符型变量 |
向量使用<-c来赋值,其中,向量的每一个元素的分隔符为“,”
| num<-c(9,2,-3,5,6,7,8,9) | 数值型向量 |
| ord<-c("a","wdw","23") | 字符型向量 |
| logv1<-c(T,T,T,TF,F,F) | 逻辑型向量 |
| logv2<-c(True,TRUE,FALSE) | 逻辑型向量 |
直接使用a:b的形式,生成从a到b的数列,如果a>b就逐项+1,否则逐项-1
从我们下面的代码中可以看出我们冒号的优先级比×和-高

第一个参数为起始值,第二个参数为终止值,第三个数为步长

当然我们也可以直接设置整个向量的长度来生成我们的向量

- rep(1,times=10)
- x <- c(1,2,3,4)
- rep(x,times=3)
- rep(x,length.out=10)
- rep(x,each=2)
- rep(x,times=c(1,2,2,3))
- rep("abc",5)
- y <- c("a","b","c")
- rep(y,2)
- rep(y,length.out=10)
- rep(y,times=c(1,2,3))

- z <- c(8,3,5,7,6,2,8,9)
- n <- z > 5
- #判断z中的全部元素是不是都大于5
- all(z>5)
- #判断z中是否有元素大于5
- any(z>5)
- #从下面的结果中我们可以看出,我们的R语言的数组下表是从1开始的
- z[2]
- z[1:4]
- z[c(2,5,7)]
- #-3表示不取第三个元素
- z[-3]
- #第二个元素和第四个元素不取
- z[c(-2,-4)]
- #和上一个代码效果相同,都是第二个元素和第四个元素不取
- z[-c(2,4)]

①矩阵是二维数组
②矩阵中的元素必须是相同类型的
③生成矩阵需要由函数matrix()实现
mymatrix <- matrix(vector,nrow = number_of_rows,
ncol = number_of_columns,
byrow = logical_value,dimnames = list(char_vector_rownames, char_vector_colnames))
从下面的运行结果中,我们会发现我们的R语言中的矩阵是默认按照列的形式摆放的。
A <- matrix(1:20,nrow=5)

当然我们的矩阵也可以试用贴下面的方法生成
- values <- c(1,2,3,4)
- #创建行索引向量
- rnames <- c("r1","r2")
- #创建列索引向量
- cnames <- c("c1","c2")
- #指定我们的矩阵,分别将我们的数值,行数传入,
- #byrow默认为FALSE,意思是按照列进行摆放
- #如果为TRUE则为按照行进行摆放
- #dimnames可以指定我们列和行的名字
- C <- matrix(values,nrow=2,byrow=T,
- dimnames=list(rnames,cnames))
- C

- #如果我们将byrow的参数调整为F就会变成如下的形式
- D <- matrix(values,nrow=2,byrow=F,
- dimnames=list(rnames,cnames))
- D

第一行代码为找到第一行第二列的数据
第二行代码为找到第一行的全部数据
第三行代码为找到第二列的数据
- C[1,2]
- C[1,]
- C[,2]

- #查找我们A中第二行,第二列和第四列的焦点所对应的值
- A[2,c(2,4)]
- #查找我们A中第一行和第三行与第三列和第四列的焦点所对应的值
- A[c(1,3),c(3,4)]
- #查看A的维数
- dim(A)
- #查看A的行数
- nrow(A)
- #查看A的列数
- ncol(A)
- #查看C矩阵的索引,先返回行索引,再返回列索引
- dimnames(C)
- #查看A矩阵的索引,先返回行索引,再返回列索引
- dimnames(A)
- #设置A的行列索引
- dimnames(A) <- list(c("one","two","three","four","five"),
- c("I","II","III","IV"))
- dimnames(A)
- A


- #将我们的c强制类型转换为向量,然后赋值给我们的horz,也就是将我们的矩阵拉直
- #从下面的运行结果中可以看出,我们拉直的方式是按列拉直
- horz <- as.vector(C)
- horz
- C

- #生成E矩阵,行数为2
- E <- matrix(c("a","b","c","d","e","f","g","h"),nrow=2)
- E
- #生成G矩阵,列数为2
- G <- matrix(c("i","j","k","l","m","n","o","p"),nrow=2)
- G
- #竖着拼接
- rbind(E,G)
- #横着拼接
- cbind(E,G)
- #生成H矩阵
- H <- matrix(1:6,nrow=2)
- H
- #生成J矩阵
- J <- matrix(5:8,ncol=2)
- J
- #这里我们可以发现,如果我们的列数不同的话,我们是不可以竖着拼接的
- rbind(H,J)
- #这里我们的行数相同,所以可以横着拼接
- cbind(H,J)
- #
- cbind(E,H)


①数组与矩阵相似,但是维度必须大于2
②数组中的元素必须是相同类型
③选取数组中匀速的方式与矩阵相同
④数组可以通过函数array创建
一般形式
myarray <- array(vector, dimensions, dimnames)
- dim1 <- c("A1","A2")
- dim2 <- c("B1","B2","B3")
- dim3 <- c("C1","C2","C3","C4")
- dim1
- dim2
- dim3

- #将我们从1-24的数据分成两行三列的四个矩阵,其索引分别为dim1,dim2,dim3
- exarray <- array(1:24, c(2,3,4),
- dimnames=list(dim1,dim2,dim3))
- exarray
- #这里我们取出的是第三个矩阵中的第一行第二列的数据
- exarray[1,2,3]

数据框是由不同类型的数据列组成的类矩阵,可以理解为是一个松散的数据集
创建指令mydata<-data.frame(col1,col2,col3,……)
- ID <- c(1,2,3,4)
- age <- c(25,34,28,52)
- status <- c("Poor","Improved","Excellent","Poor")
- diabetes <- c("Type1","Type2","Type1","Type1")
- patientdata <- data.frame(ID,age,diabetes,status)
- patientdata
- #提取出我们patientdata中的第一列和第二列
- patientdata[1:2]
- #当然我们也可以指定查找的索引名为具体的对象
- patientdata[c("diabetes","status")]
- #直接获得patientdata中的age列的元素
- patientdata$age
- #修改某一列的数据
- patientdata$age[2] <- 33
- patientdata$diabetes[3] <- "Type2"

现在我们的数据表就被修改成了如下的样子

因子:分类变量和有序变量在R中称为因子
分类变量:也称名义变量,变量的值没有大小关系,没有序列关系,就如同上面表格中病例的一型和二型一样
有序变量:变量的值存在一定的顺序关系,但没有数量关系,就如同上面代码中status中的评价等地(poor,Improved,excellent)
函数:factor(),以一个整数向量的形式存储类别值,整数的取值范围为[1,k],k为水平值的个数。
- #diabetes在这里存储的是我们病例的类型,默认是没有顺序的
- diabetes <- factor(diabetes)
- #status在这里存储的是治疗的效果,并且是有顺序的,但是默认的排序是按照字符的顺序来排序的
- status <- factor(status, ordered=T)
- status
- #我们的函数的level的排序也可以由我们自行指定
- status <- factor(status, ordered=T,
- levels=c("Poor","Improved","Excellent"))
- diabetes
- status

列表可以看做一些对象(R中的任何数据结构)的有序集合
创建一个列表
mylist <- list(object1, object2,......)
创建一个列表,并且给列表中的每个对象命名
mylist <- list(name1=object1, name2=object2,......)
- g <- "my list"
- h <- c(25,26,18,39)
- j <- matrix(1:10,nrow=5)
- k <- c("one", "two", "three")
- mylist <- list(title=g, ages=h, j, k)
- mylist

获取列表中的第二个元素
mylist[[2]]

- #在下面的代码中,我们创建了一个列表
- #其中第一个元素为ID
- #第二个元素为名字
- #第三个元素为一个矩阵,并且这个矩阵为两行两三,并且传入的数据是按照行排,不是先按列来
- #并且指定我们的维数的索引的列表名字分别为学期名和学科的名字
- stu <- list(ID="12345678",name="Ün",
- grade=matrix(c(99,96,88,92,93,87),nrow=2,byrow=T,
- dimnames=list(c("第一学期","第二学期"),
- c("数学分析","高等代数","概率论"))))
- stu
- #查看列表中的ID元素
- stu$ID
- #查看列表中的名字元素
- stu$name
- #查看我们列表中的第二个元素,这里列表的下标是从1开始的,不是从0开始的,也就是我们的名字
- stu[[2]]
- #查看我们的成绩元素
- stu$grade
- #同上
- stu[[3]]
- #查看我们的成绩元素中的第二行第三列的元素
- stu[[3]][2,3]
- #查看成绩元素中的第一行第一列的数据
- stu$grade[1,1]
- #将我们的名字元素更换为李四
- stu$name <- "李四"
- #将成绩元素的第一行第二列的位置的数据改成78
- stu$grade[1,2] <- 78
- stu
