iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >R语言常用两种并行方法之snowfall详解
  • 966
分享到

R语言常用两种并行方法之snowfall详解

2024-04-02 19:04:59 966人浏览 独家记忆
摘要

上一篇博客(R中两种常用并行方法之parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定。很多时候我们将大量的

上一篇博客(R中两种常用并行方法之parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定。很多时候我们将大量的计算任务挂到服务器上进行运行时,更看重的是其稳定性。

这时就要介绍R中的另一个并行利器——snowfall,这也是在平时做模拟时用的最多的一种方法。

针对上篇中的简单例子

首先是一个最简单的并行的例子,这个例子不需要载入任何依赖库、函数、对象等。相对也比较简单:


library(snowfall)  # 载入snowfall包

# 并行初始化
sfInit(parallel = TRUE, cpus = detectCores() - 1)

# 进行lapply的并行操作
sfLapply(1:3, function(x) c(x, x ^ 2, x ^ 3))

# 结束并行,返还内存等资源
sfStop()

语法基本也比较好理解,代码中的注释也有进行说明。sfLapply()的操作是与lapply()相对应的。类似地,还有sfSapply()sfApply()等函数,其用法与apply组中的函数一致。

snowfall进阶

在实际操作时,我们进行的函数往往没有这么简单,往往还需要依赖一些其它的函数、变量、R包等,这时就不能用上述的方法简单的进行操作了。

下面给出一个具体实际的操作案例,来展示如何载入函数中依赖的对象等参数。


n <- 100
m <- 100

fun1 <- function(...) {
  ...
}

fun2 <- function(...) {
  ...
}

sfInit(parallel = TRUE, cpus = 10) #初始化

sfLibrary(MASS)     # 载入依赖R包MASS
sfLibrary(ggplot2)  # 载入依赖R包ggplot2

sfExport("n", "m")         # 载入依赖的对象
sfExport("fun1", "fun2")   # 载入依赖的函数

# 并行计算
result <- sfLapply(1:10000, myfun) 
# 注意:myfun是自己定义的函数,里面需要用到包MASS, ggplot2;变量m, n;函数fun1, fun2。

sfStop() # 结束并行

其实很简单,对于并行函数依赖的库,就是sfLibrary()进行载入,所以来的对象以及函数则使用sfExport()进行载入。

当函数或者对象非常多时,不方便一个一个单独输入,这时我们可将所有的对象与函数存到allfun.R文件夹中,然后再采用sfSource('allfun.R')将所有的对象与函数进行导入,方便快捷。

下面我们再来看看如何查看并行进度:

使用sfCat查看并行进度

这部分参考:How to output a message in snowfall?

我们只需在函数中添加sfCat()函数,即可查看并行进度,其示例代码如下所示:


sfInit(parallel = TRUE, cpus = 2, slaveOutfile = "test.txt")
sfLibrary(snowfall)

res <- sfLapply(1:100, function(x) {
  sfCat(paste("Iteration ", x), sep = "\n")
})

sfStop()

需要注意的是,在初始化并行中,我们多加了一串命令:slaveOutfile = "test.txt",这个表示其显示的进度会储存在test.txt文件中,其余部分基本没什么变化。

与Rcpp结合会遇到的问题

当我们进行模拟想要再次进行提速时,通常都会使用Rcpp将我们的R代码改成c++代码。平时在我们使用的时候,直接使用Rcpp::sourceCpp()就可以直接将我们的C++代码中的函数进行导入,然想要使用snowfall进行并行时则会遇到问题。

这里使用了两种方法来进行尝试:

使用sfSource('myCppfun.cpp')进行导入,会在导入的时候直接报错。

先使用Rcpp::sourceCpp('myCppfun.cpp')将函数读入变量空间,然后再使用sfExport("myCppfun")将函数。这样做在最后运行代码的时候会报错。

所以遇到这种问题,只能将我们的C++代码中的函数打包成一个包,然后直接在使用snowfall进行并行时,调取这个包来运行则不会报错。

关于如何制作自己的R包,可参考:RStudio制作包含Rcpp代码的R包。

以上就是R语言常用两种并行方法之snowfall详解的详细内容,更多关于R语言并行snowfall方法的资料请关注编程网其它相关文章!

--结束END--

本文标题: R语言常用两种并行方法之snowfall详解

本文链接: https://www.lsjlt.com/news/156673.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • R语言常用两种并行方法之snowfall详解
    上一篇博客(R中两种常用并行方法之parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定。很多时候我们将大量的...
    99+
    2024-04-02
  • R语言常用两种并行方法之parallel详解
    目录并行计算在模拟时什么地方可以用到并行?怎么在R中看我们可以使用并行?parallel(简单)由于最近在进行一些论文的模拟,所以尝试了两种并行的方法:parallel与snowfa...
    99+
    2024-04-02
  • R语言行筛选的方法之filter函数详解
    目录1. 数据2. 生成ID列和类型3. 提取effect大于0.1的行4. 提取加性效应,且effect小于0的行5. 根据部分行名删选6. 固定字符特征进行行筛选总结下面介绍一下...
    99+
    2024-04-02
  • R语言中的五种常用统计分析方法
    1、分组分析aggregation 根据分组字段,将分析对象划分为不同的部分,以进行对比分析各组之间差异性的一种分析方法。 常用统计指标: 计数 length 求和 sum 平均值 ...
    99+
    2024-04-02
  • C语言中栈的两种实现方法详解
    目录一、顺序栈二、链式栈总结一、顺序栈 #include<stdio.h> #include<stdlib.h> #define maxsize 64 ...
    99+
    2024-04-02
  • r语言合并两个数据集的方法是什么
    在R语言中,合并两个数据集可以使用merge()函数或者dplyr包中的left_join()、right_join()、inner...
    99+
    2024-04-02
  • R语言读取excel数据的方法(两行命令)
    安装库 安装xlsx install.packages("xlsx") 使用 library(xlsx) ray = read.xlsx('D:/Code/R/Data i...
    99+
    2024-04-02
  • R语言的Dataframe常用操作方法
    这篇文章主要讲解了“R语言的Dataframe常用操作方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R语言的Dataframe常用操作方法”吧!上节我们简单介绍了Dataframe的定义...
    99+
    2023-06-20
  • 详解R语言数据合并一行代码搞定
    数据的合并 需要的函数 cbind(),rbind(),bind_rows(),merge() 准备数据 我们先构造一组数据,以便下面的演示 > data1&...
    99+
    2024-04-02
  • R语言操作文件方法详解教程
    目录1. 文件与文件夹列表的读取2. 新建文件与文件夹3. 文件与文件夹的删除4. 查看文件与文件夹是否存在小练习由于最近在处理一些真实数据时涉及到嵌套的 .tar.gz 文件的解压...
    99+
    2024-04-02
  • R语言中ifelse、which、%in%的用法详解
    ifelse、which、%in%是R语言里极其重要的函数,以后会经常在别的程序中看到。 ifelse ifelse是if条件判断语句的简写,它的用法如下: ifelse(tes...
    99+
    2024-04-02
  • R语言函数详解及实例用法
    函数是一组组合在一起以执行特定任务的语句。 R 语言具有大量内置函数,用户可以创建自己的函数。 在R语言中,函数是一个对象,因此R语言解释器能够将控制传递给函数,以及函数完成动作所需...
    99+
    2024-04-02
  • R语言strsplit函数用法深入详解
    1、R语言strsplit用于分割字符串 创建测试数据 > test <- "aa bb cc dd ee ff" ##创建测试数据 > test [1] "a...
    99+
    2024-04-02
  • R语言作图之直方图histogram绘制过程详解
    先给大家介绍下R语言入门:直方图histogram的绘制,具体内容如下所示: 直方图和条形图最大的不同则是直方图可以用于显示出一个数据的频数,具有统计的作用,我们下面来看一一看直方图...
    99+
    2024-04-02
  • R语言列筛选的方法select实例详解
    目录前言1. 数据描述2. 使用R语言默认的方法:列选择3. tidyverse的rename函数4. tidyverse的select函数5. select函数注意事项5.1 绝对...
    99+
    2024-04-02
  • C语言之pragma用法详解
    (0)前言 C语言Pragma 指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或...
    99+
    2023-10-12
    c语言 java linux c++ 开发语言
  • 详解MySQL Shell 运行 SQL 的两种内置方法
    目录第一、函数run_sql 如何使用:第二、函数 sql 如何使用:结论:mysql Shell 是兼容 MySQL 传统命令行客户端的超级替代版,支持 SQL 、JavaScript 、python 三种语言环境。工...
    99+
    2024-04-02
  • 详解MySQL Shell 运行 SQL 的两种内置方法
    目录第一、函数run_sql 如何使用:第二、函数 sql 如何使用:结论:MySQL Shell 是兼容 MySQL 传统命令行客户端的超级替代版,支持 SQL 、JavaScri...
    99+
    2022-11-13
    MySQL Shell 运行 SQL 内置方法 MySQL Shell 运行 SQL
  • R语言安装R包的方法,mac、windows、linux安装R包常见问题与解决方法
    R语言如何快速安装R包? 如果把R比作是沃土的话,那么R包就是鲜花,开源共享的开发者社区提供了很多功能丰富的R包,方便使用者充分利用R语言完成工作。 但是,有时候在安装R包是会遇到各种各样的报错和问题...
    99+
    2023-09-21
    程序人生
  • C语言中字符串的两种定义方式详解
    目录方式1方式2总结我们知道C语言中是没有字符串这种数据类型的,我们只能依靠数组进行存储,即字符数组,而我们定义并且初始化数组有两种方式。下面将给大家介绍这两种方式并且介绍这两种方式...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作