杂记
substitute()
和get()
函数
形如library()/require()这样的函数,参数可以为非字符串(如“ggplot”可以写成ggplot),
而在其他语言(如java/python等)看来是一个变量。因此,在默认情况下,调用require(x)
意味着require(‘x’),而不是x这个变量代表的字符串值。通过查看require的源码可以发现,
它含有这样一个判断:
1 | function (package, lib.loc = NULL, quietly = FALSE, warn.conflicts = TRUE, |
如果character.only为False(默认情况),他就会把package字符串化,而不是一个变量。
而如果我们设置character.only为True,package就可以作为变量引用。
此过程中的关键在于,函数为substitute()
:可以返回变量的名字(“name”类型),替换变量所绑定的值。
与其相反的函数get()
可以获取字符串所代表的变量。
1 | ## EXAMPLE: |
library()
和 require()
的区别:如果一个包不存在,执行到library将会停止执行,
require则会继续执行,并且返回是否加载成功的Boolean类型值。因此,require()
可以通过判断是否加载成功包来执行响应操作,如安装包。
1 | ## EXAMPLE: |
read.table()
踩坑笔记
最近在读一个基因文件时,设置header=TRUE
,但发现都进来的基因名称发生了变化,如HLA-E
,变成了HLA.E
,后来查看了函数文档才发现,
有一个参数check.names
,默认为TRUE
,而指定为FALSE
之后,就不会改变原来的名称了。
- R中的稀疏矩阵
数据类型dgCMatrix (Matrix包),构造sparseMatrix()。dgCMatrix的数据组成:
i(or j)
: 表示非零数据向量的行号(0 based)p
: 非零向量按照列的顺序排列,p表示每列非零元素的起始指针下标(0 based);x
: 按上述方式排列的向量
官方说明:https://www.rdocumentation.org/packages/Matrix/versions/1.2-18/topics/sparseMatrix
参考:类似于Python scipy中的CSR稀疏矩阵:https://blog.csdn.net/bitcarmanlee/article/details/52668477