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. .NET Framework 4.5、4.5.1 和 4.5.2 中的新增功能

    .NET Framework 4.5.4.5.1 和 4.5.2 中的新增功能 https://msdn.microsoft.com/zh-cn/library/ms171868.aspx

  2. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  3. Vim配置文件(Vimrc)

    嘛……后面的比赛基本都是在NOI Linux下进行了,windows下的开发环境基本都不能用了>_>果断转了vim,记录一下vim的配置文件- set nu syntax on filet ...

  4. css 内联元素inline 行框全解

    首先看一篇文章: CSS框模型:一切皆为框 — 从行框说起 一 行框 看图说话 上图代表了框模型中的行框.line-height 属性设置行间的距离(行高).该属性会影响行框的布局.在应用到一个块级元 ...

  5. C#中“貌似”跳出while(true)死循环

    当程序第一次执行到Read()函数时,程序会被阻塞,然后输入字符,Enter之后程序被激活,windows平台会自动在输入字符之后加入回车符和换行符,此时输入流中就有三个字符,然而read每次只读取一 ...

  6. HDU 2843 I Will Win(概率题?,怨念颇深,简单)

    题目 真不想说什么,,,这神题真讨厌,,,多校的.. //又是一道神题... #include<stdio.h> #include<string.h> //最大公约数 int ...

  7. 历代诗词咏宁夏注释2_----苍岩道人<登文昌阁>

    登文昌阁[1] 苍岩道人 壮年碌碌走尘埃,此地清幽不肯来. 老去始惊春梦促,韶光易过槿花开.[2] 历朝兴废书千卷,万古忠奸土一堆.[3] 惟爱莎罗歌最好,闲时拍板满斟杯.[4] 注释 [说明]选自& ...

  8. E文阅读

    Lesson 9 A cold welcome 冷遇 What does 'a cold welcome' refer to?On Wednesday evening, we went to the ...

  9. 【BZOJ1878】[SDOI2009]HH的项链 离线BIT

    1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...

  10. poj 3615(floyd变形)

    题目链接:http://poj.org/problem?id=3615 思路:map[i][j]表示顶点i,j之间的最高的障碍物,于是题目要求的是最高障碍物的最小值,不就是min(map[i][j], ...