面向函数范式编程(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实现范式编程的更多相关文章

  1. SparkR(R on Spark)编程指南 含 dataframe操作 2.0

    SparkR(R on Spark)编程指南 Spark  2015-06-09 28155  1评论 下载为PDF    为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...

  2. SparkR(R on Spark)编程指南 含 dataframe操作

    SparkR(R on Spark)编程指南 Spark  2015-06-09 28155  1评论 下载为PDF    为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...

  3. C# 由范式编程==运算符引发对string内存分配的思考

    今天在看C#编程指南时(类型参数的约束http://msdn.microsoft.com/zh-cn/library/d5x73970.aspx)看到一段描述: 在应用 where T : class ...

  4. 面向函数范式编程(Functional programming)

    函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程. 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合. 首先 ...

  5. R语言面向对象编程:S3和R6

    一.基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数(generic function)的实现方式. 1.S3函数的创建 S3对象组成:generic(generic FUN)+met ...

  6. R语言高性能编程,优化(一)

    这段时间学习了<R高性能编程>这本书,基于这段时间做的项目实践,总结了一些自己的体会,和大家分享 一.为什么R程序有时候会很慢?1.计算性能的三个限制条件 cpu ram io R代码本身 ...

  7. R语言高性能编程(三)

    一.使用并行计算加倍提升性能1.数据并行 VS 任务并行实现数据并行的算法scoket 并行性注意并行计算时间并不与执行任务的计算资源数目成正比(计算机核心),amdahl定律:并行代码的速度受限于串 ...

  8. R语言高性能编程(二)

    接着上一篇 一.减少内存使用的简单方法1.重用对象而不多占用内存 y <- x 是指新变量y指向包含X的那个内存块,只有当y被修改时才会复制到新的内存块,一般来说只要向量没有被其他对象引用,就可 ...

  9. GPU并行编程小结

    http://peghoty.blog.163.com/blog/static/493464092013016113254852/ http://blog.csdn.net/augusdi/artic ...

随机推荐

  1. SpringMVC基础(一)_控制器

    Spring MVC Spring MVC 基于模型-视图-控制器(Model-View-Controller)模式实现,它能够帮你构建灵活和松耦合的应用程序. 1.Spring MVC的请求追踪 每 ...

  2. C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制

    https://blog.csdn.net/IT_xiao_guang_guang/article/details/104299983 前言   1.发送手机验证码用的是网建的SMS接口(http:/ ...

  3. [JavaScript]AO对象

    1, 形式参数 2, 局部变量 3, 函数声明表达式

  4. 2018icpc徐州网络赛-H Ryuji doesn't want to study(线段树)

    题意: 有n个数的一个数组a,有两个操作: 1 l r:查询区间[l,r]内$a[l]*(r-l+1)+a[l+1]*(r-l)+a[l+2]*(r-l-1)+\cdots+a[r-1]*2+a[r] ...

  5. HDU 1004 Let the Balloon Rise(STL初体验之map)

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

  6. 13-Servlet&Request

    今日内容: 1. Servlet 2. Request Servlet 1. 概念 2. 步骤 3. 执行原理 4. 生命周期 5. Servlet3.0注解配置 6. Servlet的体系结构 se ...

  7. Linux文本界面字体颜色修改

    环境 基于centos 6.5 在文本界面 系统目录的字体颜色是 黑底蓝字  严重看不清楚,对此作出修改 使用 vi 编辑   进入  /etc/DIR_COLORS 找到“DIR 01;34   # ...

  8. Xcode如何集成Pod教程

    一般开发都会用到很多第三方的框架,利用好他们可以加快开发进度,为了更方便将第三方的框架集成到我们的项目中,Pod是个很好的选择,现在说一下该怎么将Pod集成到我们的Xcode中 第一种方法 命令行的方 ...

  9. node准备

    === 原生的api === express express  中间件相关的. https://juejin.im/post/5aa345116fb9a028e52d7217 推荐几篇入门的优质博客: ...

  10. 小浩算法|一文让你学会如何用代码判断"24"点

    “24点”是一种数学游戏,正如象棋.围棋一样是一种人们喜闻乐见的娱乐活动.它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受.今天就为大家分享一道关于“24点” ...