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. 【POJ】【2891】Strange Way to Express Integers

    中国剩余定理/扩展欧几里得 题目大意:求一般模线性方程组的解(不满足模数两两互质) solution:对于两个方程 \[ \begin{cases} m \equiv r_1 \pmod {a_1} ...

  2. jquery $.ajax方法

    $.ajax({ timeout: 3000, cache:false, global:false, type: "POST", url: WEB_URL+"/logic ...

  3. shiro添加注解@RequiresPermissions不起作用

    这是因为没有开启spring拦截器,在spring-mvc.xml中加入以下代码就可以了(一定要写在最先加载的xml中,写在后面加载的xml中也不起作用) <bean class="o ...

  4. MYSQL注入天书之stacked injection

    第三部分/page-3 Stacked injection Background-8 stacked injection Stacked injections:堆叠注入.从名词的含义就可以看到应该是一 ...

  5. POJ1474 Video Surveillance(半平面交)

    求多边形核的存在性,过了这题但是过不了另一题的,不知道是模板的问题还是什么,但是这个模板还是可以过绝大部分的题的... #pragma warning(disable:4996) #include & ...

  6. POJ 1631

    #include <iostream> #define MAXN 500005 using namespace std; int T[MAXN]; int binary_search(in ...

  7. Vi的使用

    Vi的使用: 范例一: 使用Vi进入一般模式: [root@dsetl lp]# vi test1.txt 范例二:按下i键进入编辑模式,开始编辑文字 -- INSERT – 范例三:按下[ESC]键 ...

  8. spring_150806_hibernate_non_transaction

    添加hibernate的相关jar包! 实体类: package com.spring.model; import javax.persistence.Entity; import javax.per ...

  9. Gradle Goodness: Continue Build Even with Failed Tasks

    If we run a Gradle build and one of the tasks fails, the whole build stops immediately. So we have f ...

  10. MongoDB (六) MongoDB 集合操作

    一. MongoDB 创建集合 createCollection() 方法 MongoDB db.createCollection(name, options) 是用来创建集合. 语法: 基本的 cr ...