1. Pryr安装

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

安装的环境为:

  • linux:Linux version 3.19.0-16-generic (buildd@komainu)
  • 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....

R之pryr的更多相关文章

  1. [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  2. 利用python进行数据分析2_数据采集与操作

    txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...

  3. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  4. 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?

    0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...

  5. R统计分析处理

    [翻译]Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么? 阅读目录 0.前言 1.集成开发环境 2.语法 3.数据操作 4.图形显示 5.HTML部件 ...

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

    一.基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数(generic function)的实现方式. 1.S3函数的创建 S3对象组成:generic(generic FUN)+met ...

  7. R – GPU Programming for All with ‘gpuR’

    INTRODUCTION GPUs (Graphic Processing Units) have become much more popular in recent years for compu ...

  8. 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 ...

  9. R语言之内存管理

    转载于:http://blog.csdn.net/hubifeng/article/details/41113789 在处理大型数据过程中,R语言的内存管理就显得十分重要,以下介绍几种常用的处理方法. ...

随机推荐

  1. HDU 5792 World is Exploding 树状数组+枚举

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5792 World is Exploding Time Limit: 2000/1000 MS (Ja ...

  2. js+CSS实现模拟华丽的select控件下拉菜单效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 【DP】permu

    permu [Description] 给定两个1~N的全排列A,B.有两个指针q和p,一开始q.p都为0,可执行以下三种操作: 1.q+1:2.p+1:3.q+1且p+1(Aq+1≠Bp+1时才可以 ...

  4. JavaScript之isNaN()函数讲解

    定义和用法 isNaN() 函数用于检查其参数是否是非数字值. 语法 isNaN(x) 参数 描述 x 必需.要检测的值. 返回值 如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的 ...

  5. 斌哥的 Docker 进阶指南

    过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐 ...

  6. list<T> 自定义比较器进行排序

    今天在研究List<T> 集合如何排序,我试过很多,但是都不行,然后看到msdn中的这个比较器排序,自己测试了代码,No Problem.给大家分享一下. 类型 T 的默认比较器按如下方式 ...

  7. js-jQuery对象与dom对象相互转换

    http://blog.csdn.net/jueshengtianya/article/details/8823091   核心提示:jquery选择器得到的jquery对象和标准的 javascri ...

  8. DevExpress licenses.licx 问题

    在DevExpress ( 当然并不范指DevExpress,很多收费软件都是这样的)中,licenses.licx 是用户许可证书文件,当我们使用某些ActiveX(是Microsoft对于一系列策 ...

  9. ubuntu下安装nodejs

    前言 继前几天在wins环境下使用cygwin模拟器安装nodejs出现了一些问题后,今天我决定在ubuntu下安装nodejs,安装过程非常顺利,没有报错,看来还是linux环境给力啊,由于刚接触l ...

  10. jvm 之 国际酒店 8 月 19 一次full GC 导致的事故

    事故经过: 1  15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败:成单接口调用OMS获取token失败. 2  查看checkList发现15:18开始发 ...