学习笔记,仅供参考,有错必纠


文章目录

  • R开发
    • pryr包
    • 创建匿名函数f
    • make_function
    • 变量表达式替换
    • 比较数据类型
    • 查看对象是否被修改
    • 快速创建list对象
    • 查询环境变量
    • 打印调用关系
    • 数据绑定

R开发

pryr包

pryr包是一个深层的了解R语言运行机制的工具,可以帮助我们更加贴近R语言的核心。为了能开发出更高级的R语言应用,我们需要更深入地懂R。pryr包的API主要包括内部实现工具、面向对象检查工具、辅助编程函数、代码简化工具等几个方面的功能函数.

创建匿名函数f

# 创建一个匿名函数
f(x + y)
# 创建一个匿名函数,并赋值计算
f(x + y)(1, 10) #11
# 创建一个匿名函数,指定参数x和参数y的默认值为2
f(x, y = 2,  x + y)
# 创建一个匿名函数,指定参数x和参数y的默认值为2,并赋值计算
f(x, y = 2,  x + y)(1) #3
# 创建一个多行运算的匿名函数,并赋值计算
f({y <- runif(1); x + y})(3) #3.154228

make_function

语法:

make_function(args, body, env = parent.frame())

其中参数args用于生成函数的参数部分,list类型;body用于生成函数的表达式部分,语法表达式,call类型;env用于生成函数的系统环境部分,environment类型,默认是当前环境空间的父环境空间。

g <- make_function(alist(x =,y =), quote(x - y + 3))
g(10, 5) #8

变量表达式替换

  • substitute_q
#定义一个表达式调用
x <- quote(a + b)
#对x调用参数替换
substitute(x, list(a = 1, b = 2)) #x
#对直接变量参数替换
substitute(a + b, list(a = 1, b = 2)) #1 + 2
#对x调用参数替换
substitute_q(x, list(a = 1, b = 2)) #1 + 2
eval(substitute_q(x, list(a = 1, b = 2))) #3
  • subs
a <- 1
b <- 2
#对变量表达式替换,无效
substitute(a + b) #a + b
subs(a + b) #1 + 2

比较数据类型

pryr包的otype函数可以很容易地分辨出S3类型、S4类型、RC类型的对象,比起内置的类型检查要高效得多。

otype(1) #"base"
otype(1:5) #"base"
otype(list(c("c"), data.frame())) #"base"otype(data.frame()) #"S3"#自定义S3类型
x <- 3
attr(x, "class") <- "foo"
is.object(x) #TRUE
otype(x) #"S3"#创建S4类型
setClass("Bunny", slots = list(name = "character", age = "numeric"))
huang <- new("Bunny", name = "Huang", age = 12)
isS4(huang) #TRUE
otype(huang) #"S4"#创建RC类型
Account <- setRefClass("Account")
a <- Account$new()
class(a)
#输出:"Account" attr(,"package") ".GlobalEnv"
is.object(a) #TRUE
isS4(a) #TRUE
otype(a) #"RC"

ftype函数可以很容易地分辨出function、primitive、S3、S4、internal类型的函数,同样比起内置的函数类型检查要高效得多。

ftype(`%in%`) #"function" (标准函数)
ftype(sum) #"primitive" "generic" (primitive函数)
ftype(writeLines) # "internal" (internal函数)
ftype(t.data.frame) #"s3" "method" (S3函数)
ftype(t.test) #"s3" "generic" (S3函数)#设置S4函数
setGeneric("union")
setMethod("union", c(x = "data.frame", y = "data.frame"), function(x, y) {unique(rbind(x, y))})
ftype(union) #"s4" "generic" (S4函数)

查看对象是否被修改

使用track_copy函数可以跟踪对象,通过内存地址判断对象是否被修改过.

a <- 1:3
#查看变量的内存地址
address(a) # "0x145cbc80"
#跟踪变量
track_a <- track_copy(a)
#查看是否被修改
track_a()a[3] <- 10
address(a) # "0x1490ef60"
track_a() #a copied (被修改了)

快速创建list对象

使用dots函数,我们可以通过参数设置list的数据的名字和值,快速创建list对象。

R>x <- 1
R>#创建list对象
R>myl <- dots(x, y = 2, z = )
R>#查看对象类型
R>class(myl)
[1] "list"
R>#查看对象内部结果
R>str(myl)
List of 3$  : symbol x$ y: num 2$ z: symbol

查询环境变量

  • where

使用where函数,可以定位对象在R环境中的位置:

R>x <- 1
R>#查找x变量的环境空间
R>where(x)
Error in where(x) : is.character(name) is not TRUE
R>#查询t.test函数的位置
R>where("t.test")
<environment: package:stats>
attr(,"name")
[1] "package:stats"
attr(,"path")
[1] "F:/software/R-3.6.2/library/stats"
R>#查询mean函数的位置
R>where("mean")
<environment: base>
R>#查询where函数的位置
R>where("where")
<environment: package:pryr>
attr(,"name")
[1] "package:pryr"
attr(,"path")
[1] "F:/software/R-3.6.2/library/pryr"
  • rls

使用rls函数,可以显示当前环境变量、全局环境变量、空环境变量、命名空间环境变量。

R>#打印当前环境的变量
R>ls()
[1] "a"       "myl"     "track_a" "x"
R>#打印所有环境的变量
R>rls()
[[1]]
[1] ".Random.seed" "a"            "myl"          "track_a"      "x"

打印调用关系

R>call_tree(quote(f(x, 1, g(), h(i()))))
\- ()\- `f\- `x\-  1\- ()\- `g\- ()\- `h\- ()\- `i
R>#打印语句的调用关系
R>ast(f(x, 1, g(), h(i())))
\- ()\- `f\- `x\-  1\- ()\- `g\- ()\- `h\- ()\- `i

数据绑定

通过运算符绑定数据和函数调用,创建自定义的运算符。

  • 直接绑定
x %<a-% runif(5)
for (i in c(1:3)) {print(x)
}
#输出
[1] 0.3292458 0.2830386 0.5785718 0.4164143 0.7434595
[1] 0.34672532 0.54291545 0.04689485 0.26676188 0.19652388
[1] 0.9877553 0.1378849 0.9020144 0.5287071 0.9956715
  • 常数绑定
y %<c-% 3 + 2 #5
y #3
  • 延迟绑定
z %<d-% (a + b)
a <- 10
b <- 5
z #15
  • 重新绑定
a <- 1
#对已知变量a重新赋值
rebind("a", 2)
a #2
#用 <<- 对已知变量a重新赋值
a <<- 3
a #3

R开发(part6)--pryr包相关推荐

  1. R开发(part9)--文件系统管理

    学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 文章目录 R开发 文件系统管理 查看目录 创建目录 检查目录是否存在 重命名以及删除目录 其他目录操作 查看文件 创建.重 ...

  2. R开发(part7)--环境空间

    学习笔记,仅供参考,有错必纠 文章目录 R开发 环境空间 创建一个空间 环境空间的层次结构 环境空间的特征 R开发 环境空间 环境空间是R语言中关于计算机方面的底层设计,主要用于R语言的环境加载器.通 ...

  3. 对于一些常用的R语言的算法包的归纳(修改)

    基于R,仅供自食. 相信自己,每天多学一点. (part2来源:https://blog.csdn.net/LW_GHY/article/details/56501063) part1: 连续因变量的 ...

  4. R语言中文分词包jiebaR

    R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...

  5. R语言——中文分词包jiebaR

    R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...

  6. r语言siggenes包_初探R语言可视化交互式包plotly——旭日图(Sunburst Chart)

    ploylt原来是一款用来做数据分析和可视化的在线平台,后来有人开发了一些语言(Python.R.Matlab等)的API,在R里就是plotly包了.plotly已经发布在CRAN上了,要想安装,仅 ...

  7. r语言的MASS包干什么的_怎么记住r语言这么多包?

    如果你觉得太长不想看,那就记得 @Yan He 同学说的R里面有caret,python里面用sklearn 常用检验函数: 常用作图函数包: ggplot2:万能 rattle:fancyRpart ...

  8. R开发(part11)--基于S4的面向对象编程

    学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 文章目录 R开发 基于S4的面向对象编程 创建S4对象 访问S4对象的属性 S4的泛型函数 查看S4对象的函数 R开发 基 ...

  9. R开发(part1)--R语言知识体系结构

    学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 R开发 R语言知识体系结构 R简介 R语言是一门统计语言,主要用于数学建模.统计计算.数据处理.可视化等几个方向,R语言天 ...

最新文章

  1. Socket拉屎模型之epoll
  2. OPPO这次的新旗舰,开始“搞颜色”了,当然不是外壳的那种
  3. 视频分享:编码与代码评审-质量与现实的最激烈冲突点(完整版)
  4. [转] 数学符号英文拼写及发音
  5. android通讯录项目_Flutter高仿微信项目开源-具即时通讯IM功能
  6. mysql学习-初识mysql
  7. 高级JAVA - 利用函数式接口实现通用的取并集/交集/差集
  8. oracle dba开头的表,KU$开头的表是什么表?
  9. 带锚点进度条android,Axure:实现可拖动进度条
  10. html音乐播放器如何添加暂停按钮,HotKey播放/暂停HTML5音乐播放器
  11. 【报告分享】线上汉服消费洞察报告.pdf(附下载链接)
  12. Oracle P6培训系列:14定义资源的计量单位
  13. 电商数据应用体系建设总结(一)—— 数据应用架构剖析
  14. DSP DAC数模转换
  15. 关于Raster的理解
  16. 关于配置ssl证书后网页无法访问的原因
  17. mgo EnsureIndex注意事项
  18. euecwglupnwydnp
  19. 计算机课程的教案模板,计算机教学设计模板.doc
  20. CarSim仿真快速入门(三)

热门文章

  1. 是否使用wraps的區別
  2. nltk英文词性标注
  3. 大话数据结构12 串String
  4. php用go做跳转翻页,go.php跳转不输出权重的跳转方式真的有用么?
  5. 牛客网 在线编程 数据流中的中位数
  6. sip gw功能包括_完整SIP/SDP媒体协商概论-SIP/WebRTC概要
  7. MongoDB-pymongo
  8. MySql分区表性能测试及切换案例
  9. Nagios(页面)报错: Return code of 13 is out of bounds
  10. Linux学习-15-学习LVM逻辑卷