目录
1、变量赋值
(1) <- 与 = 的区别
作为赋值运算符,=只能用于命令的最外层,而<-则可以用在任何地方。例如:
mean(x <- c(1,2,3))
[1] 2
x
[1] 1 2 3
相同情况下,若使用 = 运算符,则无法将数值保存到X。
mean(x = c(1,2,3) )
[1] 2
x
错误: 找不到对象’X’
2、调用函数时指定参数
R中通过参数位置与名称为函数指定参数。比如,有如下函数:
foo(a,b,c=1,d=1)
foo函数有a、b、c、d四个参数,其中为c、d指定了默认值,所以调用函数时可以省略。如果不在函数参数中为c或d指定值,则要另行为其分别指定值。例如,在下列命令中,指定a=3、b=4、c=5,省略参数d,所以调用foo()时默认指定d=2。
foo(3,4,5)
foo(a=3,b=4,c=5)
foo(b=4,a=3,c=5)
3、标量
(1) NULL 与 NA 的区别
NA是缺失值,表示某个数据值遗失。NULL表示未定义的值,便于编程。
is_even <- NULL
if (若a为偶数) {
is_even <- TRUE
} else {
is_even <- FALSE
}
上述代码中,执行if条件句之前,由于不知道is_even变量会被赋入何值,所以先将其初始化为NULL。随着if语句的执行,is_even变量最终会被赋予合适的值。
(2) & 与 && 的区别
与&不同,&&并不用与在向量的元素之间进行运算,它用于运算2个逻辑值。例如:
c(TRUE,TRUE) & c(TRUE,FALSE)
[1] TRUE FALSE
c(TRUE,TRUE) && c(TRUE,FALSE)
[1] TRUE
(3) 因子
因子相关函数
factor(
x, #想用因子表现的值
level, #值的水平
ordered #若为TRUE,则为顺序型数据;若为FALSE,则为名义型数据。默认为FALSE。
) #创建因子
sex <- factor("m",c("m","f"))
sex
[1] m
Levels: m f
nlevels(
x #因子值
) #返回因子中的水平个数
nlevels(sex)
[1] 2
levels(
x #因子值
) #返回因子水平目录
levels(sex)
[1] “m” “f”
levels(sex)[1]
[1] “m”
levels(sex)[2]
[1] “f”
ordered(
x #想用因子表现的值(主要是字符串向量)
) #创建有序因子
ordered("a",c("a","b","c"))
[1] a
Levels: a<b<c
4、向量
(1) 创建向量
使用c()函数创建向量,使用names()函数为向量中的各元素命名。
x <- c(1,3,4)
names(x) <- c("kim","seo","park")
x
kim seo park
1 3 4
(2) 访问向量中的数据
访问向量元素时,在[ ]中指定索引(下标)即可获取该索引处的元素。
x<-c("a","b","c")
x[1]
[1]“a”
如果传入的索引为负数,则返回该位置以外的所有元素。
x<-c("a","b","c")
x[-1]
[1]“b” “c”
使用x[start:end]能够获取start~end处的所有元素,其中包含位于start与end的元素。
x<-c("a","b","c")
x[1:3]
[1]“a” “b” “c”
如果使用names()函数对向量各元素命名,那么也可以使用元素名称访问向量中的元素。
x <- c(1,3,4)
names(x) <- c("kim","seo","park")
x
kim seo park
1 3 4
x[c("seo","park")]
seo park
3 4
NROW()返回数组的行数或列数,既可用于矩阵,也可以用于向量。 小写形式的nrow()函数仅用于获取矩阵的行数。
(3) 向量运算
函数 | 描述 |
---|---|
identical(x,y) | 判断对象是否相同 |
union(x,y) | 求合集 |
intersect(x,y) | 求交集 |
setdiff(x,y) | 求差集 |
setequal(x,y) | 判断x与y是否为相同集合 |
运算符 | 含义 |
---|---|
value %in% x | 判断向量x中是否保存着value |
x+n | 对向量x中的所有元素加n,最后得到新向量。也可以使用*、/、-、==等运算符 |
使用 == 或 != 运算符也可以对保存于两个向量中的值进行统一比较。然而,由于if等条件语句中要求只使用1个真值或假值,所以不要使用 ==、 != 运算符,而要使用前面介绍的identical()函数。
c(1,2,3) == c(1,2,100)
[1] TRUE TRUE FALSE
(4) 连续数字组成的向量
seq()用于创建序列,seq_along(x)根据给定对象长度创建序列,所创建的向量长度与x的长度相同。
seq(
from, #初值
to, #终值
by #增值
)
seq(3,7,2)
[1] 3 5 7
seq_along(
along.with #根据该参数长度创建序列
) #along.with长度为N时,返回包含1-N数字的向量
x <- c(2,3,4,5,6)
seq_along(x)
[1] 1 2 3 4 5
(5) 保存重复值的向量
rep(
x. #保存重复值的向量
times, #整个向量的重复次数
each #各个值的重复次数
) #返回与x(保存重复值)相同类型的对象
rep(1:2,times=5)
[1] 1 2 1 2 1 2 1 2 1 2
rep(1:2,each=5)
[1] 1 1 1 1 1 2 2 2 2 2
rep(1:2,each=5,times=2)
[1] 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2
5、列表
(1) 创建列表
list(
key1=value1,
key2=value2,
…
) #返回key1保存value1,返回key2保存value2……的列表
(x<-list(names="foo",height=c(1,3,5)))
$ names
[1] “foo”
$ height
[1] 1 3 5
列表还可以混合存多种类型的数据,甚至一个列表中可以嵌套其他列表。
list(a=list(val=c(1,2,3),b=list(val=c(1,2,3,4)))
$a
$a $val
[1] 1 2 3
$b
$b $val
[1] 1 2 3
(2) 访问列表中的数据
访问方法 | 含义 |
---|---|
x$key | 获取列表x中key键对应的值 |
x[n] | 从列表x中获取第n个数据的子列表 |
x[[n]] | 获取列表x中第n个键的值 |
x<-list(names="foo",height=c(1,3,5))
x$names
[1] “foo”
x[1]
$ names
[1] “foo”
x[[1]]
[1] “foo”
x[[2]]
[1] 1 3 5
6、矩阵
(1) 创建列表
matrix(
data, #要创建矩阵的数据向量
nrow, #行数
ncol, #列数
byrow=FALSE, #填充数据时,若byrow为True,则按行填充矩阵;若byrow为FALSE,则按列填充矩阵
) #返回值为矩阵;
函数 | 含义 |
---|---|
dimnames(x) | 获取对象各维度名称 |
dimnames(x)<-value | 为对象的各个维度设置名称,第一个向量为行名,第二个向量为列名 |
rownames(x) | 获取矩阵的行名 |
rownames(x)<-value | 设置矩阵的行名 |
colnames(x) | 获取矩阵的行名 |
colnames(x)<-value | 设置矩阵的行名 |
(2) 矩阵运算
函数 | 含义 |
---|---|
t(x) | 求矩阵或数据框的转置矩阵 |
solve(a,b) | 从方程a %*% x =b 中求解x,若不指定b,则求a的逆矩阵 |
nrow(x) | 求数组的行数 |
ncol(x) | 求数组的列数 |
dim(x) | 求对象的维度 |
dim(x)<-value | 设置对象的维度 |
若为dim的返回值设置新维度,那么原数据维度将会改变。
x <- matrix(c(1,2,3,4,5,6),ncol=3)
dim(x)
[1] 2 3
x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
dim <- c(3,2)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
7、数组
(1) 创建数组
array(
data=NA, #保存数据的向量
dim=length(data) #数组维度,若不设置改参数,则创建一维数组
dimnames=NULL #维度名称
) #返回值为数组
array(1:12,dim=c(3,4))
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
array(1:12,dim=c(2,2,3))
, ,1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, ,2
[,1] [,2]
[1,] 5 7
[2,] 6 8
, ,3
[,1] [,2]
[1,] 9 11
[2,] 10 12
8、数据框
(1) 创建数据框
data.frame用于创建数据框,str用于查看任意R对象的内部结构。
(d <- data.frame(x=c(1,2,3,4,5),
y=c(2,4,6,8,10),
z=c('M','F','M','F','M')))
x y z
1 1 2 M
2 2 4 F
3 3 6 M
4 4 8 F
5 5 10 M
str(d)
‘data.frame’: 5 obs. of 3 variables:
$ x: num 1 2 3 4 5
$ y: num 2 4 6 8 10
$ z: chr “M” “F” “M” “F” …
使用类似语法也可以将不存在的w列添加到上述数据框d。
d$w <- c('A','B','C','D','E')
d
x y z w
1 1 2 M A
2 2 4 F B
3 3 6 M C
4 4 8 F D
5 5 10 M E
(2)访问数据框
d <- data.frame(x=c(1,2,3,4,5),y=c(2,4,6,8,10))
d[,c("x")]
[1] 1 2 3 4 5
上述代码中,使用d[,c(“x”)]选取列x后,输出的结果并不是数据框的表形式,而更像向量。这是因为,列是一维时,返回值与相应列的数据类型不同。若要避免这种类型转换,只要设置drop=FALSE选项即可。
d[,c("x"),drop=FALSE]
x
1 1
2 2
3 3
4 4
5 5
函数 | 含义 |
---|---|
head(x) | 返回对象的开始部分 |
tail(x) | 返回对象的结尾部分 |
View(x) | 调用数据视图 |
9、类型判别
函数 | 含义 |
---|---|
class(x) | 判断对象x的数据类型 |
str(x) | 查看对象x的内部结构 |
is.factor(x) | 判断给定对象x是否为因子 |
is.numeric(x) | 判断给定对象x是否为保存数值的向量 |
is.character(x) | 判断给定对象x是否为保存字符串的向量 |
is.matrix(x) | 判断给定对象x是否为矩阵 |
is.array(x) | 判断给定对象x是否为数组 |
is.data.frame(x) | 判断给定对象x是否为数据框 |
10、类型转换
函数 | 含义 |
---|---|
as.factor(x) | 将给定对象x转换为因子 |
as.numeric(x) | 将给定对象x转换为数值向量 |
as.character(x) | 将给定对象x转换为字符串向量 |
as.matrix(x) | 将给定对象x转换为矩阵 |
as.array(x) | 将给定对象x转换为数组 |
as.data.frame(x) | 将给定对象x转换为数据框 |
ps:文章用于学习
[参考书目] 徐珉久,R语言与数据分析实战,2017