R中如何读取大数据

这个是一个复杂的问题。但是本文只是给出一点点小经验。

假设我们有一个大文件需要读入R,但是我们不太确定文件是什么样子的,或者说,我们很确定文件是什么样子的,但是我们只想读入其中某些列,应该怎么办呢?

如果你的足够的内存和耐心,你可以按常规:

data <- read.table("datatable.txt")
head(data)

如果你在列表表头时发现数据并不是你想象的格式,这无疑是让人很难受的[……]

Read more

bioconductor基础IRanges/GenomicRanges

随着next-generation-sequence技术的不断完善,bioconductor的开发重心也由microarray转移至NGS的应用中来。越来越多的软件包针对NGS。而这些针对NGS的软件包,大多数都是基于IRanges或者GenomicRanges这两个包的。它俩与Biostrings一起,成为了NGS数据结构的基础。

IRanges定义了IRanges类,它的构建函数为:[……]

Read more

关于R当中的mapply

之前的博客《R数据分析当中的化整为零(Split-Apply-Combine)策略》以及《关于R当中的tapply》有提到一些关于lapply, sapply, vapply和tapply的内容。对于mapply只是粗粗带过。但很多时候,使用mapply可以帮助我们大大提高效率。我们先来看一个非常时用的函数yapply。

yapply <- function(X,FUN, ...) { 
  index <- seq(length.out=length(X)) 
  namesX <- names(X) 
  if(is.null(namesX)) 
    namesX <- rep(NA,length(X))
 
  FUN <- match.fun(FUN) 
  fnames <- names(formals(FUN)) 
  if( ! "INDEX" %in% fnames ){ 
    formals(FUN) <- append( formals(FUN), alist(INDEX=) )   
  } 
  if( ! "NAMES" %in% fnames ){ 
    formals(FUN) <- append( formals(FUN), alist(NAMES=) )   
  } 
  mapply(FUN,X,INDEX=index, NAMES=namesX,MoreArgs=list(...)) 
}

[……]

Read more

使用Bioconductor画染色体示意图ideograms

之前介绍过如何使用circos来画染色体示意图ideograms。那么,在bioconductor中是否可以实现呢?肯定的说,是可以的,但是其生成的图像却有些差强人意。不过,总好过没有,而且,它还有很大的成长空间。

在Bioconductor中,用于画染色体示意图的有三种工具,它们分别是:quantsmooth,GenomeGraphs,以及ggbio。

首先介绍quantsmooth[……]

Read more

编辑中文的Rnw文件

如果您想出一本关于R或者Bioconductor的书,那么使用Sweave来写作无疑可以利用到latex中的诸多优势,同时还可以让系统自动检查和导出你的代码。那么如何使Rnw兼容中文体系统,尤其是简体中文呢?其实这并不难。

首先需要解决的是中文兼容问题。有几种选择,CJK, xeCJK,或者ctex,这决定于你的工作平台。如果你使用的是pdfLaTeX的话,可能需要CJK,如果是XeLaTe[……]

Read more

R扩展包的写作规范

这一规范并不是硬性要求,但是可以帮助我们写出方便和他人交流的代码。

使用命名空间namespaces

除了R的基础包(Base packages)中的函数,其它函数在调用时最好加上命名空间,以方便阅读。

  1. 如果需要调用包中的私有函数,需要写成mypackage:::.somePrivateFunc()的形式。最初,人们习惯私有函数的写法是以.起始的匈牙利命名法的函数名。但是新的R[……]

Read more

在R中为histogram增加拟合曲线

有一个前题,那就是,这里我们并不需要真实的数据分布曲线,只是希望得到一条曲线,可以拟合柱状图的高度就可以了。如果知道分布公式了,可以直接使用分布公式计算出拟合曲线。

我们使用的办法是使用loess回归后计算出一条拟合曲线。

> h<-hist(mtcars$mpg, breaks=12)
> lo <- loess(h$counts~h$mids)
> x<- seq(min(h$breaks), max(h$breaks), (max(h$breaks)-min(h$breaks))/1000)
> lines(x, predict(lo, x), col="red")

如何创建一个R扩展包

名词解释;

  • 包(Package): 基于R系统的标准化的代码,数据及文档的文件集合
  • 库(Library): 安装包的文件路径
  • 安装源(Repository): 提供可用于安装的带有版本控制的包的网站
  • 源码(Source): 人类可读的源代码或者文档组合而成的包的一种形式
  • 二进制文件(Binary): 依据指定操作平台经过编译形成的机器可读的二进制形式代码或者文档组合而成的包[……]

Read more

R中的environment

在R当中,比较容易理解的是list,比如

> y<-list(a=1,"noname",b=1:10,c="C")
> y
$a
[1] 1
 
[[2]]
[1] "noname"
 
$b
 [1]  1  2  3  4  5  6  7  8  9 10
 
$c
[1] "C"
 
> y[2]
[[1]]
[1] "noname"
 
> y[[2]]
[1] "noname"
> y$b
 [1]  1  2  3  4  5  6  7  8  9 10
> names(y)
[1] "a" ""  "b" "c"
> y[1:3]
$a
[1] 1
 
[[2]]
[1] "noname"
 
$b
 [1]  1  2  3  4  5  6  7  8  9 10

从这里可以看出,list是一种可以容纳多种不同类型数据的容器。访问它的子变量,可以有两种方式,一是通过operator [[,一是通过operator $。而list是一种有排序的变量,所以可以通过operator [来访问其子变量,但是要注意的是,[和[[返回的值是不一样的,[……]

Read more