R之pryr

1. Pryr安装

由于项目pryr,还没有发布到CRAN,仅支持从github安装。要使用devtools包来通过github来安装,在https://github.com/hadley/pryr中给出了安装pryr的方法。由于我的电脑之前并没有安装devtools,所以先从安装devtools开始。

安装的环境为:

  • linux:Linux version 3.19.0-16-generic ([email protected])
  • R:R version 3.1.2
  • Platform: x86_64-pc-linux-gnu (64-bit)

devtools安装:

依赖库:
~sudo apt-get install libcurl4-openssl-dev
~sudo apt-get install libxml++2.6-dev

使用root权限打开R:
~sudo R

>install.packages("devtools","/home/beili/R/packages")
>.libPaths("/home/beili/R/packages")
>search()
 [1] ".GlobalEnv"        "package:devtools"  "package:stats"
 [4] "package:graphics"  "package:grDevices" "package:utils"
 [7] "package:datasets"  "package:methods"   "Autoloads"
[10] "package:base"  

pryr安装

>.libPaths("/home/beili/R/packages")
>library(devtools)
>install_github("hadley/pryr")

出现下面信息时,说明安装完成:
installing to /home/beili/R/packages/pryr/libs
** R
** tests
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (pryr)

注:在未安装依赖包时,如果直接安装devtools一般会出现下面的错误,警告信息可能不尽相同,把相应的包安装进去进行了:

警告信息:
1: In install.packages("devtools", pkg) :
  安装程序包‘XML’时退出狀態的值不是0
2: In install.packages("devtools", pkg) :
  安装程序包‘RCurl’时退出狀態的值不是0
3: In install.packages("devtools", pkg) :
  安装程序包‘httr’时退出狀態的值不是0
4: In install.packages("devtools", pkg) :
  安装程序包‘rversions’时退出狀態的值不是0
5: In install.packages("devtools", pkg) :
  安装程序包‘devtools’时退出狀態的值不是0


2.pryr使用

下面是大神写的一篇使用pryr的文章http://blog.fens.me/r-pryr/除了引用文章中的基础方法外,下面是自己实践的时候遇到的一些问题和体会。

2.1 匿名函数f()

通过使用f()函数,可以实现创建匿名函数,在单行完成函数定义、调用、运算的操作。函数f(...,body)的最后一个参数是函数的主体,通过f定义的函数,可以自动识别定义的函数的参数(通过新使用的变量是否使用“<-”或者“=”赋值来判断,这也就造成了在函数内部不能使用与参数相同的变量进行迭代等等操作,必须进行重新copy一个变量),下面是个例子:

> g=f({for(i in 1:10) x<-x+1})> g
function ()
{
    for (i in 1:10) x <- x + 1
}> g()错误: 找不到对象‘x‘

函数第一没有定义对象x,再者并没有定义返回的表达式,所以正确的形式如下:

> g=f({x=0;for(i in 1:10) x=x+1;x})> g()[1] 10

如果想传递过来参数则如下:

> f({x=arg1;for(i in 1:10) x=x+1;x^arg2})
function (arg1, arg2)
{
    x = arg1
    for (i in 1:10) x = x + 1
    x^arg2
}> f({x=arg1;for(i in 1:10) x=x+1;x^arg2})(1,2)[1] 121

2.2 创建函数make_function()

通过使用make_function()函数,可以通过make_function()函数的3个参数,来创建一个普通的函数,从而实现动态性。

> f <- function(x) x + 3
> g <- make_function(alist(x = ), quote(x + 3))

# The components of the functions are identical
> identical(formals(f), formals(g))
> identical(body(f), body(g))
> identical(environment(f), environment(g))

# But the functions are not identical because f has src code reference
> identical(f, g)

> attr(f, "srcref") <- NULL
# Now they are:
> stopifnot(identical(f, g))

2.3 partial()创建缺省参数的函数

使用方式:

partial(`_f`, ..., .env = parent.frame(), .lazy = TRUE)其中 .lazy: If ‘TRUE’ arguments evaluated lazily, if ‘FALSE’,evaluated when ‘partial’ is called.

这个函数与标准的缺省值函数使用差别不大。下面是包自带的例子:

> f <- partial(runif, n = rpois(1, 5))
> f
function (...)
runif(n = rpois(1, 5), ...)
> f()
[1] 0.6129163 0.3181137
> f()
[1] 0.83188673 0.97501092 0.07324238 0.89498934 0.36405785
> f(min=1,max=10)
[1] 2.890537 7.088587 3.883414 8.733926

2.4....

时间: 2024-09-29 05:13:00

R之pryr的相关文章

R语言文件相关的操作

1. 文件系统介绍 R语言对文件系统的操作,包括文件操作和目录操作,函数API都定义在base包中. 2. 目录操作 2.1 查看目录 查看当前目录下的子目录. # 启动R程序 ~ R # 当前的目录 > getwd() [1] "/home/conan/R/fs" # 查看当前目录的子目录 > list.dirs() [1] "." "./tmp" 查看当前目录的子目录和文件. > dir() [1] "readme

R语言面向对象编程:S3和R6

一.基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数(generic function)的实现方式. 1.S3函数的创建 S3对象组成:generic(generic FUN)+method(generic.class FUN) 泛型函数(generic)创建示例: get_n_elements <- function(x,...) { UseMethod("get_n_elements") } 通常用UseMethod()函数定义一个泛型函数的名称,通过传入参数

用R语言进行文件系统管理

阅读导读: 1.R语言如何检查文件或目录是否存在?如何重命名一个文件? 2.R语言如何查看和修改目录的权限? 3.R语言如何删除一个文件? 4.用R语言管理一个文件系统时,都有哪些特殊的目录? 5.如何查看R软件指定包所在目录? 1. 文件系统介绍 计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上

R语言基于S4的面向对象编程

前言 本文接上一篇文章 R语言基于S3的面向对象编程,本文继续介绍R语言基于S4的面向对象编程. S4对象系统具有明显的结构化特征,更适合面向对象的程序设计.Bioconductor社区,以S4对象系统做为基础架构,只接受符合S4定义的R包. 目录 S4对象介绍 创建S4对象 访问对象的属性 S4的泛型函数 查看S4对象的函数 S4对象的使用 1 S4对象介绍 S4对象系统是一种标准的R语言面向对象实现方式,S4对象有明确的类定义,参数定义,参数检查,继承关系,实例化等的面向对象系统的特征. 2

R8&mdash;批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数

一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到以公司ID生成的指定文件夹下!所以第一个问题就是200多个公司,不可能每一次下载,都要去点击:新建文件夹,然后对文件夹命名,too boring and monotonous.嘿嘿,幸好有R的陪伴! let's do it,来看看R如何完成这些工作! 主要用到两个函数 一. dir.create-生

How-to go parallel in R – basics + tips(转)

Today is a good day to start parallelizing your code. I’ve been using the parallel package since its integration with R (v. 2.14.0) and its much easier than it at first seems. In this post I’ll go through the basics for implementing parallel computat

R之内存管理

引言 R的内存管理机制究竟是什么样子的?最近几日在讲一个分享会,被同学问到这方面的问题,可是到网上去查,终于找到一篇R语言内存管理不过讲的不清不楚的,就拿memory.limit()函数来说,是在windows下才使用的,作者几乎没有提及,还有rm(),gc()函数到底怎么工作的,什么时候用,都无从提及.看来百度是解决不了了,关键时候还是靠google啊,这不,很快找到了一篇相当不错的文章Memory,还是人家外国人比较注重细节,下面的部分几乎是从那儿翻译过来的.需要学习R的高级编程的同学,可以

R语言并行化基础与提高

本文将介绍R中的并行计算,并给出了一些常见的陷进以及避免它们的小技巧. 使用并行计算的原因就是因为程序运行时间太长.大部分程序都是可以并行化的,它们大部分都是Embarrassingly parallel.这里介绍几种可以并行化的方法: Bootstrapping 交叉验证(Cross-validation) (Multivariate Imputation by Chained Equations ,MICE)相关介绍:R语言中的缺失值处理 拟合多元回归方程 学习lapply是关键 没有早点学

Advanced R之函数

转载请注明出处,谢谢. 再次声明下,本人水平有些,错误之处敬请指正. 函数 函数是R基本的块结构单元:为了掌握本书中的更高级技术,你需要对函数有扎实的了解.也许你已经写过一些函数,并了解函数的基本知识.本章的焦点在于将你现有的对函数非正式的认识,转变为严密的理解,你将了解什么是函数,函数是如何工作的.在这一章你将看到一些有意思的技巧和技术,但最重要的是构造块结构更高级的技术. 理解R最重要的一点是,函数是自治的对象.可以像其他任何类型的对象一样来使用函数.这一点在函数编程中将深入讲解. 测试 回