用R实现范式编程
面向函数范式编程(Functional programming)
模拟简单的随机过程
模拟一个简单的随机过程:从N~(0,1)
标准正态分布中产生100个随机值,反复5次得到一个list,再以每个list的初始值作为起点后一个的值作为过程步的增量走到下一步,直到走到尽头。
先来看一下accumulate函数的作用
# Understanding the arguments .x and .y when .f
# is a lambda function
# .x is the accumulating value
2:6 %>% accumulate(~ .x) # 产生以3为起点方差为3的序列
## [1] 2 2 2 2 2
# .y is element in the list
2:6 %>% accumulate(~ .y)
## [1] 2 3 4 5 6
#
2:6 %>% accumulate(~ .x + .y) # 产生以2为起点2:6为累加值的序列
## [1] 2 5 9 14 20
利用accumulate尝试实现一个带有漂移的随机过程
# Simulating stochastic processes with drift
## Not run:
plotSim <- function(draft){
rerun(5, rnorm(100)) %>% # This is a convenient way of generating sample data. It works similarly to replicate(..., simplify = FALSE).
set_names(paste0("sim", 1:5)) %>%
map(~ accumulate(., ~ draft + .x + .y)) %>%
map_df(~ data_frame(value = .x, step = 1:100), .id = "simulation") %>%
ggplot(aes(x = step, y = value)) +
geom_line(aes(color = simulation)) +
ggtitle("Simulations of a random walk with drift")
}
plotSim(0.001)
多数据建模
检验车辆数据集中变量单位加仑的英里数与重量之间的线性关系是否会在不同的引擎汽缸中有显出差异?
# If each element of the output is a data frame, use
# map_df to row-bind them together:
mtcars %>%
split(.$cyl) %>%
map(~ lm(mpg ~ wt, data = .x)) %>%
map_df(~ as.data.frame(t(as.matrix(coef(.)))))
## (Intercept) wt
## 1 39.57120 -5.647025
## 2 28.40884 -2.780106
## 3 23.86803 -2.192438
对数据集中不同的数据分别进行建模,再预测:
# Split into pieces, fit model to each piece, then predict
by_cyl <- mtcars %>% split(.$cyl)
mod <- by_cyl %>% map(~ glm(mpg ~ wt, data = .))
a <- map2(mod, by_cyl, predict) %>%
flatten_df() %>%
t() %>%
as.data.frame() %>%
mutate(a=rownames(.))
mtcars %>%
mutate(a=rownames(.)) %>%
left_join(a) %>%
select(a, mpg, V1) %>%
mutate(e = abs(mpg-V1)) %>%
ggplot(aes(a, e))+
geom_point()+
coord_flip()
## Joining, by = "a"
多模型预测
对单一数据集进行多个模型训练预测:
result <- mtcars %>%
tbl_df() %>%
nest() %>%
mutate(mod1 = map(data, ~ glm(mpg ~ wt, data = .)),
mod2 = map(data, ~ lm(mpg ~ wt, data = .)),
pred1 = map2(mod1, data, predict),
pred2 = map2(mod2, data, predict)
)
result
## # A tibble: 1 x 5
## data mod1 mod2 pred1 pred2
## <list> <list> <list> <list> <list>
## 1 <tibble [32 x 11]> <S3: glm> <S3: lm> <dbl [32]> <dbl [32]>
产生四个数据集,分别按照一定格式的文件命名方式保存下来
# create dfs to loop over
df <- data.frame(
a = rnorm(10),
b = rnorm(10),
c = rnorm(10),
d = rnorm(10)
)
obj <- list(df1 = df, df2 = df, df3 = df, df4 = df )
# create file names to loop over
path <- getwd()
folder <- "RDa"
names <- c("df1", "df2", "df3", "df4")
if(!file.exists(folder)){
dir.create(folder)
fnames <- lapply(names, function(x) paste0((file.path(path, folder)), '/', x, ".RDa"))
}
fnames <- lapply(names, function(x) paste0((file.path(path, folder)), '/', x, ".RDa"))
walk2(obj, fnames, ~ save(.x, file = .y))
dir('RDa')
## [1] "df1.RDa" "df2.RDa" "df3.RDa" "df4.RDa"
用R实现范式编程的更多相关文章
- SparkR(R on Spark)编程指南 含 dataframe操作 2.0
SparkR(R on Spark)编程指南 Spark 2015-06-09 28155 1评论 下载为PDF 为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...
- SparkR(R on Spark)编程指南 含 dataframe操作
SparkR(R on Spark)编程指南 Spark 2015-06-09 28155 1评论 下载为PDF 为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...
- C# 由范式编程==运算符引发对string内存分配的思考
今天在看C#编程指南时(类型参数的约束http://msdn.microsoft.com/zh-cn/library/d5x73970.aspx)看到一段描述: 在应用 where T : class ...
- 面向函数范式编程(Functional programming)
函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程. 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合. 首先 ...
- R语言面向对象编程:S3和R6
一.基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数(generic function)的实现方式. 1.S3函数的创建 S3对象组成:generic(generic FUN)+met ...
- R语言高性能编程,优化(一)
这段时间学习了<R高性能编程>这本书,基于这段时间做的项目实践,总结了一些自己的体会,和大家分享 一.为什么R程序有时候会很慢?1.计算性能的三个限制条件 cpu ram io R代码本身 ...
- R语言高性能编程(三)
一.使用并行计算加倍提升性能1.数据并行 VS 任务并行实现数据并行的算法scoket 并行性注意并行计算时间并不与执行任务的计算资源数目成正比(计算机核心),amdahl定律:并行代码的速度受限于串 ...
- R语言高性能编程(二)
接着上一篇 一.减少内存使用的简单方法1.重用对象而不多占用内存 y <- x 是指新变量y指向包含X的那个内存块,只有当y被修改时才会复制到新的内存块,一般来说只要向量没有被其他对象引用,就可 ...
- GPU并行编程小结
http://peghoty.blog.163.com/blog/static/493464092013016113254852/ http://blog.csdn.net/augusdi/artic ...
随机推荐
- 构建一个学生Student,根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号: sName表示姓名: sSex表示性别: sAge表示年龄: sJava:表示Java课程成 ...
- TortoiseSVN的安装及其简单使用
VisualSVN-Server的安装以及简单使用 TortoiseSVN的安装及其简单使用 VisualSVN的安装及冲突的处理 安装完VisualSVN-Server后,Test仓储里边什么都没有 ...
- DaSiamRPN学习
9月14日,2018年视觉目标跟踪挑战赛(Visual-Object-Tracking Challenge 2018)的结果在ECCV Workshop上揭晓.VOT2018共设三项任务:Baseli ...
- learn about sqlserver partitition and partition table --- add or remove table partitions addition more
Yes . In the previous. chapter , we see how to generate "partition function" "parttit ...
- Nginx:Nginx limit_req limit_conn限速
简介 Nginx是一个异步框架的Web服务器,也可以用作反向代理,负载均衡器和HTTP缓存,最常用的便是Web服务器.nginx对于预防一些攻击也是很有效的,例如CC攻击,爬虫,本文将介绍限制这些攻击 ...
- 大数据篇:Zookeeper
Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...
- python上获得随机字符
import random import string print(string.ascii_letters) # 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO ...
- yum 升级php版本
centos默认安装的php都是 5.3的 ,现在需要 5.6以上的版本 手动安装比较麻烦,直接用yum升级了. 一.准备工作 首先检查当前php版本 #php -v 查看安装的php扩展包 #yu ...
- hadoop local、伪分布 模式
local模式: 把安装包 解压到 /usr/local 下 [hadoop@master local]$ sudo tar -zxvf hadoop-2.7.3.tar.gz 创建一个软连接 ...
- Python 调用 Shell命令
python程序中调用shell命令,是件很酷且常用的事情今天来总结一下 1.使用os模块 的 system 此函数会启动子进程,在子进程中执行command,并返回comman ...