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. 剑指offer--面试题21

    题目:设计包含min函数的栈,pop(),push(),min()的时间复杂度均为O(1) 自己所写代码如下:(写‘栈’的代码还是有些不熟练!) #include <iostream> u ...

  2. razor GPU

    抓之前要把设置里面 Setting -Debug Setting -Graphic -PA DEBUG yes -RAZOR GPU yes replay是个很有用的功能,要设置 -Debug Set ...

  3. IBatis 常用XML

      <select id="GetInfo"> <![CDATA[ select * from vi_WaterStation ]]> <dynami ...

  4. Kali Linux 命令集

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  5. 如何做到尽可能不使用庞大的jQuery

    jQuery 是现在最流行的 JavaScript 工具库. 据统计,目前全世界 57.3% 的网站使用它.也就是说,10 个网站里面,有 6 个使用 jQuery.如果只考察使用工具库的网站,这个比 ...

  6. CodeForces 321A

    A. Ciel and Robot time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  7. 141029 V7 异步通知测试,15分钟循环代码重构,同步更新payInfo测试,支付成功timer测试成功说明

    支付成功之后的1分钟定时任务:测试成功. 2014-10-29 17:16:06,892 DEBUG [http-bio-8086-exec-1] org.springframework.web.se ...

  8. iOS第三方推送-极光推送

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  9. POJ 1523 SPF(求割点)

    题目链接 题意 : 找出图中所有的割点,然后输出删掉他们之后还剩多少个连通分量. 思路 : v与u邻接,要么v是u的孩子,要么u是v的祖先,(u,v)构成一条回边. //poj1523 #includ ...

  10. 有用的一些web网站

    1.http://www.aseoe.com/api-download/download.html 爱思资源网