R开发(part6)--pryr包
学习笔记,仅供参考,有错必纠
文章目录
- 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包相关推荐
- R开发(part9)--文件系统管理
学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 文章目录 R开发 文件系统管理 查看目录 创建目录 检查目录是否存在 重命名以及删除目录 其他目录操作 查看文件 创建.重 ...
- R开发(part7)--环境空间
学习笔记,仅供参考,有错必纠 文章目录 R开发 环境空间 创建一个空间 环境空间的层次结构 环境空间的特征 R开发 环境空间 环境空间是R语言中关于计算机方面的底层设计,主要用于R语言的环境加载器.通 ...
- 对于一些常用的R语言的算法包的归纳(修改)
基于R,仅供自食. 相信自己,每天多学一点. (part2来源:https://blog.csdn.net/LW_GHY/article/details/56501063) part1: 连续因变量的 ...
- R语言中文分词包jiebaR
R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...
- R语言——中文分词包jiebaR
R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...
- r语言siggenes包_初探R语言可视化交互式包plotly——旭日图(Sunburst Chart)
ploylt原来是一款用来做数据分析和可视化的在线平台,后来有人开发了一些语言(Python.R.Matlab等)的API,在R里就是plotly包了.plotly已经发布在CRAN上了,要想安装,仅 ...
- r语言的MASS包干什么的_怎么记住r语言这么多包?
如果你觉得太长不想看,那就记得 @Yan He 同学说的R里面有caret,python里面用sklearn 常用检验函数: 常用作图函数包: ggplot2:万能 rattle:fancyRpart ...
- R开发(part11)--基于S4的面向对象编程
学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 文章目录 R开发 基于S4的面向对象编程 创建S4对象 访问S4对象的属性 S4的泛型函数 查看S4对象的函数 R开发 基 ...
- R开发(part1)--R语言知识体系结构
学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 R开发 R语言知识体系结构 R简介 R语言是一门统计语言,主要用于数学建模.统计计算.数据处理.可视化等几个方向,R语言天 ...
最新文章
- Socket拉屎模型之epoll
- OPPO这次的新旗舰,开始“搞颜色”了,当然不是外壳的那种
- 视频分享:编码与代码评审-质量与现实的最激烈冲突点(完整版)
- [转] 数学符号英文拼写及发音
- android通讯录项目_Flutter高仿微信项目开源-具即时通讯IM功能
- mysql学习-初识mysql
- 高级JAVA - 利用函数式接口实现通用的取并集/交集/差集
- oracle dba开头的表,KU$开头的表是什么表?
- 带锚点进度条android,Axure:实现可拖动进度条
- html音乐播放器如何添加暂停按钮,HotKey播放/暂停HTML5音乐播放器
- 【报告分享】线上汉服消费洞察报告.pdf(附下载链接)
- Oracle P6培训系列:14定义资源的计量单位
- 电商数据应用体系建设总结(一)—— 数据应用架构剖析
- DSP DAC数模转换
- 关于Raster的理解
- 关于配置ssl证书后网页无法访问的原因
- mgo EnsureIndex注意事项
- euecwglupnwydnp
- 计算机课程的教案模板,计算机教学设计模板.doc
- CarSim仿真快速入门(三)