购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 baseR计算工具概览

3.1.1 基本数学函数

表3-1中列出了常见的基本数学运算函数,关于三角函数的部分,读者可以调用帮助文档来查看。完整的数学函数列表可以通过执行'?S3groupGeneric'或'?S4group-Generic'来查看。使用这些基本数学函数时,默认值的处理对计算结果往往会产生很大的影响。诸如'mean'、'max'和'min'等这类常用函数可以定义为在计算前移除默认值,但像'cumsum'这类对数值进行累积运算的函数,则需要在计算前手动处理默认值,否则会因为默认值的可传染性而导致计算错误。

表3-1 基本数学运算函数及功能说明

下列代码可简单解读为自定义向量x,调用cumsum累积求和,结果中当计算到第11位数值,也就是默认值的时候,所有后续结果全都变成NA。去除NA的方式有很多种,读者可以根据实际情况自行选择,一般对于数据框中某一列中的NA,可以使用第2章中介绍的drop_na函数。这里作者使用了which函数配合子集选取“[”来去除NA。第三行代码的解读顺序由内而外依次如下。

1)is.na:对向量x进行默认值辨别。

2)which:定位默认值位置。

3)x[-which(…)]:按位置移除对应的默认值。

4)累加运算。


> x <- c(1:10,NA, 11:20)
> cumsum(x)
##  [1]  1  3  6 10 15 21 28 36 45 55 NA NA NA NA NA NA NA NA NA NA NA
> cumsum(x[-which(is.na(x))])
##  [1]   1   3   6  10  15  21  28  36  45  55  66  78  91 105 120 136 153
## [18] 171 190 210

计算差值的函数diff是另外一个很实用,但却很容易让人困惑和抓狂的函数。简单来说,这个函数可以按照用户自定义的间隔来计算间隔两端数值之间的差。下列代码中包括了该函数使用默认设置时的计算规则及结果,以及实际使用该函数时可能会遇到的一个小问题:

代码解读具体如下。

1)第一到三行,调用差值函数计算向量b各个数值之间的差值并显示结果,这里使用的是默认参数设置,也就是计算相邻两个数值之间的差值。

2)第四行,计算相隔一位的两个数值的差值。

3)第五到六行,显示b和a中的数值个数,这里的a要比b少一个数值,而第四行的计算结果比b少两个数值,也就是说差值计算的结果要比原始值少,少的数量为计算间隔。只计算单一向量,或者对数据框、矩阵的全部列进行整体计算时,直接使用'diff'函数一般不会出现问题。但是,当对数据框或矩阵的某一列进行差值计算,并希望将计算结果作为新列出现在同一个数据框或阵列时,因为差值结果的长度小于原始数值的长度,因此必须要补齐少的部分,只有补齐了,函数才不会报错。

4)第七行中给出了最简单的补齐方式,使用NA填补第一位。计算的结果则可以解释为:b中的第一位数值前无数值可减,所以为NA,第二位与第一位数值的差为1,第三位与第二位数值的差为1,以此类推。

代码实现具体如下:


> b <- c(1:3,5,7:11,13)
> a <- diff(b)
> a
## [1] 1 1 2 2 1 1 1 1 2
> diff(b, lag = 2)
## [1] 2 3 4 3 2 2 2 3
> length(b)
## [1] 10
> length(a)
## [1] 9
> a <- c(NA,diff(b))
> a
##  [1] NA  1  1  2  2  1  1  1  1  2

3.1.2 基本运算符号

表3-2列出了R中常用的数学运算符号。除了常见的加减乘除之外,逻辑和比较运算符会在数据清理过程中频繁使用。比如为了筛选非默认值的数据,在函数is.na前使用逻辑非符号“!”。抑或是在使用filter函数过滤数据框时,为了筛选特定的观测值,通常会使用“列名”== X来实现。

表3-2 数学符号及中文释义

同时筛选多个观测值时,查询匹配运算符“%in%”便会显得特别实用。该运算符的基本意义为查询运算符左侧的向量是否匹配右侧指定的向量。下面的代码展示了如何使用该运算符:

代码解具体如下:


> df <- tibble(a = 1:6,
      b = letters[1:6])
    > df %>% 
  filter( a %in% c(1,3,4))

    ## # A tibble: 3 x 2
##       a b    
##   <int> <chr>
## 1     1 a    
## 2     3 c    
## 3     4 d

    > df %>% 
  filter( !a %in% c(1,3,4))

    ## # A tibble: 3 x 2
##       a b    
##   <int> <chr>
## 1     2 b    
## 2     5 e    
## 3     6 f

1)随机自定义一个数据框df,然后对其进行查询匹配数据筛选。

2)筛选出列a中值为1、3和4的行。

3)筛选出列a中非1、3和4的行。

代码实现具体如下:

3.1.3 基本统计函数

baseR中最常用的统计函数可能非summary莫属了。一般的数据分析网络教程可能都会在数据分析前先贴一张统计汇总的结果,以展示数据中每个变量的分位数、平均值、中间值等基本信息。笔者认为这些信息并不能对学习或是实际应用数据分析产生事半功倍的效果,有些情况反而会因为信息太多而干扰分析的过程。所以建议读者在进行真正的数据分析之前,首先应想好自己的分析问题及方向,从而确定好所需函数,尽量避免对数据进行过度解读。当然,如果只是为了了解函数的特性,则无须考虑这条建议。

另外两个常见的统计模型函数,anova和lm在使用过程中需要注意公式formula的排列顺序。其中,线性回归模型lm中的formula的设置格式一般为y~x。一般情况下,波浪线左侧多为因变量,而右侧的为自变量。右侧可以同时设置多个变量,代表多个变量均对左侧的因变量产生影响。也可以通过将formula参数设置为y~x+0,使回归线(regression line)通过x和y轴的交点通过0点。

使用卡方检验chisq.test需要注意相依表的构建,相依表中若有一整列默认值或0,则卡方检验结果或许会无法得到准确的显著性差异值'p-value'。

在生物统计学绘制结果图表时,通常会需要计算标准误差来标注抽样误差的大小情况。R语言中并没有直接计算标准误差的函数,所以通常需要用户自行计算该指标。表3-3中给出了标注误差(se)的计算公式,其中sd为标准差,sqrt(n)代表样本总数的平方根。

表3-3 常用统计函数及功能说明

当读者了解了以上基本的数学运算函数、符号及统计功能函数在R中的表现形式后,再结合第2章介绍过的管道函数(%>%)以及接下来将要介绍的dplyr包,数据计算和总结归纳将会变得简洁而高效。 SUkmWSHVqF+NL6ULdoe4RUD19zHZuljX39+vmn71I+CzhvLVmWyxX6UKenBFWG6z

点击中间区域
呼出菜单
上一章
目录
下一章
×