zoukankan      html  css  js  c++  java
  • 开发自己的R包(转)

    R不必说,数据统计分析可视化的必备语言,R包开发的门槛比较低,所以现在随便一篇文章都会发表一个自己的R包,这样有好处(各种需求早有人帮你解决了)也有坏处(R包太多,混乱,新手上手较难)。作为生信工程师,日常就是查看别人写的R包,分析数据,然后借鉴、修改,根据自己的需求开发新的R包。

    参考:

    http://blog.fens.me/r-build-package/

    R包开发

    如何系统地学习 R 语言的各种 packages?

    Developing Packages with RStudio

    To do:开发一个R包,部署到GitHub上(发paper的标准流程)

    r-package

    前言
    R是一个世界范围开发者共同协作的产物,至2013年2月共计近5000个包可在互联网上自由下载。现在作为R的使用者,有朝一日也可以成为R的开发者,把我们自己的知识做成R包分享给世界。

    今天我们简单介绍如何开发自己R包。

    目录

    1. 系统环境
    2. vi中制作R包
    3. RStudio中制作R包

    1. 系统环境

    操作系统:Linux Ubuntu 12.04.2 LTS 64bit
    R语言版本:R 3.0.1

    ~ uname -a
    Linux conan-deskop 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    
    ~ cat /etc/issue
    Ubuntu 12.04.2 LTS 
     l
    
    ~ R --version
    R version 3.0.1 (2013-05-16) -- "Good Sport"
    Copyright (C) 2013 The R Foundation for Statistical Computing
    Platform: x86_64-pc-linux-gnu (64-bit)
    
    R is free software and comes with ABSOLUTELY NO WARRANTY.
    You are welcome to redistribute it under the terms of the
    GNU General Public License versions 2 or 3.
    For more information about these matters see
    http://www.gnu.org/licenses/.

    2. vi中制作R包

    创建目录:/home/conan/R/demo

    ~ mkdir /home/conan/R/demo
    ~ cd /home/conan/R/demo

    新建R脚本sayHello.R

    ~ vi sayHello.R
    sayHello<-function(name){
        print(paste("Hello",name))
    }

    自定义一个sayHello的函数,将作为自定义包的第一个函数。

    启动R程序

    ~ R
    
    #清空变量设置工作目录
    rm(list=ls())
    setwd("/home/conan/R/demo")
    
    #通过sayHello的脚本生成开发包的骨架
    package.skeleton(name="sayHello",code_files="/home/conan/R/demo/sayHello.R")
    Creating directories ...
    Creating DESCRIPTION ...
    Creating NAMESPACE ...
    Creating Read-and-delete-me ...
    Copying code files ...
    Making help files ...
    Done.
    Further steps are described in './sayHello/Read-and-delete-me'.
    
    #退出R的客户端
    q()

    在当前目录生成sayHello目录

    ~ ls -l
    drwxrwxr-x 4 conan conan 4096  8月  1 15:07 sayHello
    -rw-rw-r-- 1 conan conan   59  8月  1 15:04 sayHello.R
    
    ~ ls -l sayHello
    -rw-rw-r-- 1 conan conan  281  8月  1 15:07 DESCRIPTION
    drwxrwxr-x 2 conan conan 4096  8月  1 15:07 man
    -rw-rw-r-- 1 conan conan   31  8月  1 15:07 NAMESPACE
    drwxrwxr-x 2 conan conan 4096  8月  1 15:07 R
    -rw-rw-r-- 1 conan conan  420  8月  1 15:07 Read-and-delete-me
    
    ~ ls -l sayHello/man
    -rw-rw-r-- 1 conan conan 1043  8月  1 15:07 sayHello-package.Rd
    -rw-rw-r-- 1 conan conan 1278  8月  1 15:07 sayHello.Rd
    
    ~ ls -l sayHello/R
    -rw-rw-r-- 1 conan conan 59  8月  1 15:07 sayHello.R

    文件及目录解释:

    • DESCRIPTION文件: 包描述文件
    • NAMESPACE文件: 包的命名空间文件
    • Read-and-delete-me文件: 说明文件,可以删除
    • man目录: 存放函数的说明文件的目录
    • R目录:存放源文件的目录
    • man/sayHello.Rd: sayHello函数的说明文件,latex语法,用来生成PDF文档
    • man/sayHello-package.Rd: sayHello包的说明文件,可以删除

    编辑DESCRIPTION文件:

    ~ vi sayHello/DESCRIPTION
    Package: sayHello
    Type: Package
    Title: R package demo for sayHello
    LazyLoad: yes
    Author: Dan Zhang
    Maintainer: Dan Zhang
    Description: This package provides a package demo
    License: GPL
    Version: 1.0
    Date: 2013-07-31
    Depends: R (>= 3.0.1)
    </BSSPIRIT@GMAIL.COM>

    编辑NAMESPACE文件:

    ~ vi sayHello/NAMESPACE
    exportPattern("^[[:alpha:]]+")

    编辑sayHello.Rd文件:

    ~ vi sayHello/man/sayHello.Rd
    
    ame{sayHello}
    alias{sayHello}
    	itle{a sayHello function demo}
    description{
    a sayHello function demo
    }
    usage{
    sayHello(name)
    }
    arguments{
      item{name}{a word}
    }
    details{
    nothing
    }
    value{
    no return
    }
    
    eferences{
    nothing
    }
    author{
    Dan Zhang
    }
    
    ote{
    nothing
    }
    seealso{
    nothing
    }
    examples{
    sayHello("world")
    }
    keyword{ sayHello }

    删除文件:

    ~ rm sayHello/Read-and-delete-me
    ~ rm sayHello/man/sayHello-package.Rd

    打包sayHello

    ~ R CMD build sayHello
    * checking for file ‘sayHello/DESCRIPTION’ ... OK
    * preparing ‘sayHello’:
    * checking DESCRIPTION meta-information ... OK
    * checking for LF line-endings in source and make files
    * checking for empty or unneeded directories
    * building ‘sayHello_1.0.tar.gz’
    
    ~ ls -l
    drwxrwxr-x 4 conan conan 4096  8月  1 15:22 sayHello
    -rw-r--r-- 1 conan conan  663  8月  1 15:24 sayHello_1.0.tar.gz
    -rw-rw-r-- 1 conan conan   59  8月  1 15:04 sayHello.R

    本地安装sayHello

    ~ R CMD INSTALL sayHello_1.0.tar.gz
    * installing to library ‘/home/conan/R/x86_64-pc-linux-gnu-library/3.0* installing *source* package ‘sayHello’ ...
    ** R
    ** preparing package for lazy loading
    ** help
    *** installing help indices
    ** building package indices
    ** testing if installed package can be loaded
    * DONE (sayHello)
    
    ~ ls /home/conan/R/x86_64-pc-linux-gnu-library/3.0
    bitops  digest  manipulate  rstudio  sayHello  XML

    sayHello包,已经在当前账号下进行安装

    使用sayHello函数

    ~ R
    
    library(sayHello)
    sayHello("Conan")
    [1] "Hello Conan"
    
    #查看sayHello文档
    ?sayHello
    
    sayHello               package:sayHello                R Documentation
    
    a sayHello function demo
    
    Description:
         a sayHello function demo
    Usage:
         sayHello(name)
    Arguments:
        name: a word
    Details:
         nothing
    Value:
         no return
    Note:
         nothing
    Author(s):
         Dan Zhang
    References:
         nothing

    我们包已经成功制作完成!并在本地进行安装和使用!!

    检查R包
    如果要提交R包和CRAN,必须要执行check检查。如果有任何的error和warning都将不被通过。

    退出R的客户端,回到命令行

    先安装latex的依赖包(500mb+)

    ~ sudo apt-get install texlive
    ~ sudo apt-get install texlive-xetex
    ~ sudo apt-get install texlive-latex-base
    ~ sudo apt-get install texlive-fonts-extra 
    ~ sudo apt-get install texlive-latex-recommended
    ~ sudo apt-get install texlive-fonts-recommended

    执行check

    ~ R CMD check sayHello_1.0.tar.gz
    
    * using log directory ‘/home/conan/R/demo/sayHello.Rcheck’
    * using R version 3.0.1 (2013-05-16)
    * using platform: x86_64-pc-linux-gnu (64-bit)
    * using session charset: UTF-8
    * checking for file ‘sayHello/DESCRIPTION’ ... OK
    * checking extension type ... Package
    * this is package ‘sayHello’ version ‘1.0* checking package namespace information ... OK
    * checking package dependencies ... OK
    * checking if this is a source package ... OK
    * checking if there is a namespace ... OK
    * checking for executable files ... OK
    * checking for hidden files and directories ... OK
    * checking for portable file names ... OK
    * checking for sufficient/correct file permissions ... OK
    * checking whether package ‘sayHello’ can be installed ... OK
    * checking installed package size ... OK
    * checking package directory ... OK
    * checking DESCRIPTION meta-information ... OK
    * checking top-level files ... OK
    * checking for left-over files ... OK
    * checking index information ... OK
    * checking package subdirectories ... OK
    * checking R files for non-ASCII characters ... OK
    * checking R files for syntax errors ... OK
    * checking whether the package can be loaded ... OK
    * checking whether the package can be loaded with stated dependencies ... OK
    * checking whether the package can be unloaded cleanly ... OK
    * checking whether the namespace can be loaded with stated dependencies ... OK
    * checking whether the namespace can be unloaded cleanly ... OK
    * checking loading without being on the library search path ... OK
    * checking for unstated dependencies in R code ... OK
    * checking S3 generic/method consistency ... OK
    * checking replacement functions ... OK
    * checking foreign function calls ... OK
    * checking R code for possible problems ... OK
    * checking Rd files ... OK
    * checking Rd metadata ... OK
    * checking Rd cross-references ... OK
    * checking for missing documentation entries ... OK
    * checking for code/documentation mismatches ... OK
    * checking Rd usage sections ... OK
    * checking Rd contents ... OK
    * checking for unstated dependencies in examples ... OK
    * checking examples ... OK
    * checking PDF version of manual ... WARNING
    LaTeX errors when creating PDF version.
    This typically indicates Rd problems.
    * checking PDF version of manual without hyperrefs or index ... OK
    
    WARNING: There was 1 warning.
    See
      ‘/home/conan/R/demo/sayHello.Rcheck/00check.log’
    for details.

    发现有一个警告,checking PDF version of manual ... WARNING。是latex生成pdf错误。

    查检警告的debug日志

    ~ R CMD Rd2pdf sayHello_1.0.tar.gz
    Converting Rd files to LaTeX ...
      sayHello_1.0.tar.gz
    Warning in readLines(f) :
      incomplete final line found on 'sayHello_1.0.tar.gz'
    Warning in parse_Rd("sayHello_1.0.tar.gz", encoding = "unknown", fragment = FALSE,  :
      sayHello_1.0.tar.gz:16: unexpected '}'
    Warning: sayHello_1.0.tar.gz:1: All text must be in a section
    Warning: sayHello_1.0.tar.gz:2: All text must be in a section
    Warning: sayHello_1.0.tar.gz:3: All text must be in a section
    Warning: sayHello_1.0.tar.gz:4: All text must be in a section
    Warning: sayHello_1.0.tar.gz:5: All text must be in a section
    Warning: sayHello_1.0.tar.gz:6: All text must be in a section
    Warning: sayHello_1.0.tar.gz:7: All text must be in a section
    Warning: sayHello_1.0.tar.gz:8: All text must be in a section
    Warning: sayHello_1.0.tar.gz:9: All text must be in a section
    Warning: sayHello_1.0.tar.gz:10: All text must be in a section
    Warning: sayHello_1.0.tar.gz:11: All text must be in a section
    Warning: sayHello_1.0.tar.gz:12: All text must be in a section
    Warning: sayHello_1.0.tar.gz:15: All text must be in a section
    Error : sayHello_1.0.tar.gz: Sections 	itle, and 
    ame must exist and be unique in Rd files

    求助:
    Error : sayHello_1.0.tar.gz: Sections itle, and ame must exist and be unique in Rd files
    这个问题我检查了好多次始终没有解决。请求帮助!!

    问题解决:安装完整包

    sudo apt-get install texlive-full

    上传R包
    当解决了上面的WARN就可以上传了。。。(待续)

    卸载R包

    remove.packages("sayHello")
    Removing package from ‘/home/conan/R/x86_64-pc-linux-gnu-library/3.0~ ls /home/conan/R/x86_64-pc-linux-gnu-library/3.0
    bitops  digest  manipulate  rstudio  XML

    3. RStudio中制作R包

    RStudio Server的安装及配置,请参考:多人在线协作R开发RStudio Server

    RStudio已经为我们准备了一个有界面的环境,方便我们制作R包。

    1. 创建一个工程sayHello
    2. 编辑DESCRIPTION
    3. 创建sayHello.R的脚本
    4. 编辑sayHello.Rd的文档

    1). 创建一个工程sayHello
    2). 编辑rstudio/sayHello/DESCRIPTION

    Package: sayHello
    Type: Package
    Title: R package demo for sayHell
    LazyLoad: yes
    Author: Dan Zhang
    Maintainer: Dan Zhang
    Description: This package provides a package demo
    License: GPL
    Version: 1.0
    Date: 2013-07-31
    Depends: R (>= 3.0.1)
    </BSSPIRIT@GMAIL.COM>

    3). 编辑rstudio/sayHello/R/sayHello.R的脚本

    sayHello<-function(name){
      print(paste("Hi",name))
    }

    4). 编辑rstudio/sayHello/man/sayHello.Rd的文档

    
    ame{sayHello}
    alias{sayHello}
    	itle{a sayHello function demo}
    description{
    a sayHello function demo
    }
    usage{
    sayHello(name)
    }
    arguments{
      item{name}{a word}
    }
    details{
    nothing
    }
    value{
    no return
    }
    
    eferences{
    nothing
    }
    author{
    Dan Zhang
    }
    
    ote{
    nothing
    }
    seealso{
    nothing
    }
    examples{
    sayHello("world")
    }
    keyword{ sayHello }

    5). 执行build和reload
    6). 执行check
    在RStudio中可以更方便的进行R的开包,打包,检查等的过程。RStudio就是R的神器!

    虽然还没有发布自己的R包,不过很快了!!有此想法已经多时了!!每一天加油!

  • 相关阅读:
    html基础笔记
    webpack实用配置总结
    Vue生命周期
    Vue跨域解决方法
    日历
    绝对地址和相对地址
    HTML+CSS要点
    (利用DOM)在新打开的页面点击关闭当前浏览器窗口
    前端面试
    前端工程师的知识体系
  • 原文地址:https://www.cnblogs.com/leezx/p/7359108.html
Copyright © 2011-2022 走看看