- 2.1 变量和常量
- 变量:用来保存输入或计算的值的东西
- 2.2 R语言的变量命名
- 只有字母(区分大小写),数字,下划线,英文点号可以出现
- 数字和下划线不能开头
- 英文点号后面不能直接接数字
- 2.3 数据类型
- 2.3.1 数值 numeric
- 2.3.2 字符 character
- 2.3.3 逻辑 logical
- 只有两个值TRUE和FALSE,缺失时为NA
- 逻辑运算符:< <= == != > >= %in%
- x %in% y 把y当做一个集合,将x中的每一个元素对y集合进行运算,从而得到一个逻辑型向量。
- &,|,!运算符分别表示与或非 &&和||分别表示短路的标量逻辑与和短路的标量逻辑或
- 2.3.4 因子factor
- 是名义型变量或有序型变量,一个因子不仅包括分类变量本身,还包括变量的可能的水平(即使他们在数据中没有出现)
- #factor(x,levels=sort(unique(x),na.last=TRUE), labels=lebels, exclude=NA, ordered=is.order (x))
- #其中,levels用于指定因子的可能水平;labels用于定义levels的名字;exclude指从向量x中剔除的水平值;ordered指因子的levels是否要排序
- 2.3.5 类型转换
- as.numeric()
- as.character()
- factor(c(as.character(x1), as.character(x2)))
- 2.4 数据结构
- 2.4.1 向量vector
- 是将若干个基础类型相同的值储存在一起,各个元素可以按照序号进行访问。 向量从1开始,要访问向量x的第n个元素,写为x[n] 如果是负整数下标,表示扣除相应元素后的子集 向量只能对自己整数倍(或者被整数倍)的向量进行运算,每次都会从头重新利用短的一个。 向量的运算:+ - * / ^ %/% %% (加减乘除乘方整除取余)
- 2.4.2 矩阵matrix
- 用matrix函数定义,实际储存成一个向量,根据保存的行数和列数对应到矩阵的元素,存储次序为按列存储。例:
- A <- matrix(11:16, nrow=3, ncol=2); print(A)
- ## [,1] [,2]
- ## [1,] 11 14
- ## [2,] 12 15
- ## [3,] 13 16
- 矩阵可以利用方括号取出指定的行列的子矩阵 用colnames()函数可以给矩阵每列命名, 也可以访问矩阵列名, 用rownames()函数可以给矩阵每行命名, 也可以访问矩阵行名。如
- colnames(A) <- c('X', 'Y')rownames(A) <- c('a', 'b', 'c')A
- ## X Y
- ## a 11 14
- ## b 12 15
- ## c 13 16
- A[,'Y']
- ## a b c
- ## 14 15 16
- A['b',]
- ## X Y
- ## 12 15
- A[c('a', 'c'), 'Y']
- ## a c
- ## 14 16
- 矩阵的本质是多了一个dim属性的向量,元素次序按列填入。所以也可以像向量一样,仅用一个正整数将向量的矩阵取子集
- A[c(1,3,5)]
- ## [1] 11 13 15
- 矩阵运算,两个相同形状的矩阵“+”,“-”,“*”,“/”的时候,表示对应元素进行运算。
- “%*%”表示数学意义上的矩阵乘法
- 2.4.3 数组array
- 矩阵是二维的数组,dim是控制其中的维数的参数
- ara <- array(1:24, dim=c(2,3,4)); ara
- ## , , 1
- ##
- ## [,1] [,2] [,3]
- ## [1,] 1 3 5
- ## [2,] 2 4 6
- ##
- ## , , 2
- ##
- ## [,1] [,2] [,3]
- ## [1,] 7 9 11
- ## [2,] 8 10 12
- ##
- ## , , 3
- ##
- ## [,1] [,2] [,3]
- ## [1,] 13 15 17
- ## [2,] 14 16 18
- ##
- ## , , 4
- ##
- ## [,1] [,2] [,3]
- ## [1,] 19 21 23
- ## [2,] 20 22 24
- 用法上基本和矩阵一致
- 2.4.4 列表list
- 列表可以有多个元素,但与向量不同的是,列表的元素之间可以是不同的类型
- rec <- list(name="李明", age=30, scores=c(85, 76, 90))rec
- ## $name
- ## [1] "李明"
- ##
- ## $age
- ## [1] 30
- ##
- ## $scores
- ## [1] 85 76 90
- #访问单个列表的元素必须使用两重方括号格式进行访问或者用“$”进行访问rec[[3]]
- ## [1] 85 76 90
- rec$scores
- ## [1] 85 76 90
- 如果采用单重方括号,取到的仍然是一个列表 另外必须注意列表是一个一维的数据,因此不可以使用类似矩阵一样的方法来提取列表中的内容。
- 2.4.5 数据框data.frame
- 类似于数据库或者Excel表的格式。这样的格式在R中被叫做数据框,数据框类似于矩阵,但是允许有不同的数据类型。R数据框是一个特殊的列表,每个列表元素都是一个长度相等的向量。 data.frame()函数会将字符型列转换成因子, 加选项stringsAsFactors=FALSE可以避免这样的转换。 数据框的行名 数据框可以用矩阵的格式访问,也可以使用列表一样的方式进行访问
- d <- data.frame( name=c("李明", "张聪", "王建"), age=c(30, 35, 28), height=c(180, 162, 175), stringsAsFactors=FALSE)print(d)
- ## name age height## 1 李明 30 180## 2 张聪 35 162## 3 王建 28 175
- d[2,3]
- ## [1] 162
- d[[2]]
- ## [1] 30 35 28
- d["age"]
- ## # A tibble: 3 x 1## age## <dbl>## 1 30## 2 35## 3 28
- d$age
- ## [1] 30 35 28
- d[1:2,"age"]
- ## [1] 30 35
- 2.5 R中的循环和条件判断
- x=vector()for(i in c(1:100)){ if(i%%2 ==1){ x[length(x)+1] <- i }}x
- ## [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
- ## [26] 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
- 2.6 R的文本处理函数
- #合成字符library(stringr)str_c(c("x","y"),c("a","b"),sep ="*")
- ## [1] "x*a" "y*b"
- str_c(c("a", "bc", "def"), collapse="--")
- ## [1] "a--bc--def"
- name <- "zhangsan
- "tele <-110120
- str_glue("姓名: {name}", "电话号码: {tele}", .sep="; ")
- ## 姓名: zhangsan; 电话号码: 110120
- #字符格式
- sprintf("%1dx%1d=%2d", 1:5, 5:1, (1:5)*(5:1))
- ## [1] "1x5= 5" "2x4= 8" "3x3= 9" "4x2= 8" "5x1= 5"
- #其中%d表示输出整数,%f表示输出实数, %02d表示输出宽度为2、不够左填0的整数, %6.2f表示输出宽度为6、宽度不足时左填空格、含两位小数的实数, 等等#字符串长度str_length(c("a", "bc", "def", "北京"))
- ## [1] 1 2 3 2
- #取子字符串str_sub("term2017", 5, 8)
- ## [1] "2017"
- str_sub("term2017", -4, -1)
- ## [1] "2017"
- #特殊字符:如"\n"表示换行符, "\t"表示制表符, "\r"表示回车符
- 2.4.1 向量vector
2020.9.7丨生信基础巩固R篇(二)之数据基本概念
最新推荐文章于 2022-04-24 07:28:55 发布