R语言学习笔记

杂记

  • substitute()get()函数

形如library()/require()这样的函数,参数可以为非字符串(如“ggplot”可以写成ggplot),
而在其他语言(如java/python等)看来是一个变量。因此,在默认情况下,调用require(x)
意味着require(‘x’),而不是x这个变量代表的字符串值。通过查看require的源码可以发现,
它含有这样一个判断:

1
2
3
4
5
6
function (package, lib.loc = NULL, quietly = FALSE, warn.conflicts = TRUE,
character.only = FALSE)
{
if (!character.only)
package <- as.character(substitute(package))
...

如果character.only为False(默认情况),他就会把package字符串化,而不是一个变量。
而如果我们设置character.only为True,package就可以作为变量引用。
此过程中的关键在于,函数为substitute():可以返回变量的名字(“name”类型),替换变量所绑定的值。
与其相反的函数get()可以获取字符串所代表的变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
## EXAMPLE:
> x="ab"
> y=substitute(x)
> mode(x)
[1] "character"
> x
[1] "ab"
> mode(y)
[1] "name"
> y
x
> as.character(y)
[1] "x"

library()require() 的区别:如果一个包不存在,执行到library将会停止执行,
require则会继续执行,并且返回是否加载成功的Boolean类型值。因此,require()
可以通过判断是否加载成功包来执行响应操作,如安装包。

1
2
3
4
5
## EXAMPLE:
if(!require('ggplot2')){
install.pacakge('ggplot2')
library('ggplot2')
}
  • read.table() 踩坑笔记

最近在读一个基因文件时,设置header=TRUE,但发现都进来的基因名称发生了变化,如HLA-E,变成了HLA.E,后来查看了函数文档才发现,
有一个参数check.names,默认为TRUE,而指定为FALSE之后,就不会改变原来的名称了。

  • R中的稀疏矩阵

数据类型dgCMatrix (Matrix包),构造sparseMatrix()。dgCMatrix的数据组成:

R面向对象编程