目录

  • 1、变量赋值
  •   (1) <- 与 = 的区别
  • 2、调用函数时指定参数
  • 3、标量
  •   (1) NULL 与 NA 的区别
  •   (2) & 与 && 的区别
  •   (3) 因子
  • 4、向量
  •   (1) 创建向量
  •   (2) 访问向量中的数据
  •   (3) 向量运算
  •   (4) 连续数字组成的向量
  •   (5) 保存重复值的向量
  • 5、列表
  •   (1) 创建列表
  •   (2) 访问列表中的数据
  • 6、矩阵
  •   (1) 创建列表
  •   (2) 矩阵运算
  • 7、数组
  •   (1) 创建数组
  • 8、数据框
  •   (1) 创建数据框
  •   (2)访问数据框
  • 9、类型判别
  • 10、类型转换


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、标量

        NA是缺失值,表示某个数据值遗失。NULL表示未定义的值,便于编程。

is_even <- NULL
if (若a为偶数) {
    is_even <- TRUE
} else {
    is_even <- FALSE
}

        上述代码中,执行if条件句之前,由于不知道is_even变量会被赋入何值,所以先将其初始化为NULL。随着if语句的执行,is_even变量最终会被赋予合适的值。

        与&不同,&&并不用与在向量的元素之间进行运算,它用于运算2个逻辑值。例如:

c(TRUE,TRUE) & c(TRUE,FALSE)

    [1] TRUE FALSE

c(TRUE,TRUE) && c(TRUE,FALSE)

    [1] TRUE

        因子相关函数

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、向量

        使用c()函数创建向量,使用names()函数为向量中的各元素命名。

x <- c(1,3,4)
names(x) <- c("kim","seo","park")
x

    kim seo park
    1     3     4

        访问向量元素时,在[ ]中指定索引(下标)即可获取该索引处的元素。

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()函数仅用于获取矩阵的行数。

函数

描述

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

        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

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、列表

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

访问方法

含义

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、矩阵

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

设置矩阵的行名

函数

含义

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、数组

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、数据框

        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

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