关于函数R doParallel和doMCR 之间的区别是什么foreach?doParallel支持windows,unix-like,同时doMC仅支持unix-like.换句话说,为什么doParallel不能doMC直接替换?谢谢.
更新:
doParallel是建立在parallel,这基本上是对等合并multicore,并snow和自动使用系统的相应工具.因此,我们可以doParallel用来支持多系统.换句话说,我们可以doParallel用来代替doMC.
参考:http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf
顺便说一下,registerDoParallel(ncores=3)和之间有什么区别
cl <- makeCluster(3)
registerDoParallel(cl)
Run Code Online (Sandbox Code Playgroud)
它似乎registerDoParallel(ncores=3)可以自动停止集群,而第二个不会自动停止和需要stopCluster(cl).
参考:http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf
我已经在各种机器上运行了一些代码测试代码,总是得到相同的结果.我认为各种do ...包背后的哲学是它们可以互换地用作foreach的%dopar%的后端.为什么不是这样?
例如,此代码段有效:
library(plyr)
library(doMC)
registerDoMC()
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
Run Code Online (Sandbox Code Playgroud)
虽然这些代码段中的每一个都失败了:
library(plyr)
library(doSMP)
workers <- startWorkers(2)
registerDoSMP(workers)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
stopWorkers(workers)
library(plyr)
library(snow)
library(doSNOW)
cl <- makeCluster(2, type = "SOCK")
registerDoSNOW(cl)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
stopCluster(cl)
library(plyr)
library(doMPI)
cl <- startMPIcluster(count = 2) …Run Code Online (Sandbox Code Playgroud) 我得到了名义上的错误:
mcfork(): Unable to fork: Cannot allocate memory
Run Code Online (Sandbox Code Playgroud)
试图用mcapply运行一个函数后,但top我说我是51%
这是在EC2实例上,但我确实有最新的R.
有谁知道还有什么可以导致这个错误?
谢谢,
-N
使用foreach和doMC后端使用"多核"并行性时(我使用doMC时,我调查了其他包不允许从我想要获取进度条,使用进度包,但任何进度)这适用于Linux终端,即没有tcltk弹出窗口).
鉴于它使用分叉,我可以想象它可能不可能,但我不确定.
预期用途是指示并行加载连接100个文件时的进度(通常在#!Rscript中)
我看过几个帖子,比如在R中使用"foreach()"函数时如何创建进度条?.很高兴为此奖励.
编辑
为有人向我展示500分的赏金
Reprex
# load packages
library("futile.logger")
library("data.table")
library("foreach")
# create temp dir
tmp_dir <- tempdir()
# create names for 200 files to be created
nb_files <- 200L
file_names <- file.path(tmp_dir, sprintf("file_%s.txt", 1:nb_files))
# make it reproducible
set.seed(1L)
nb_rows <- 1000L
nb_columns <- 10L
# create those 200 files sequentially
foreach(file_i = file_names) %do%
{
DT <- as.data.table(matrix(data = runif(n = nb_rows * nb_columns), nrow …Run Code Online (Sandbox Code Playgroud) 对于像doMC和doSMP这样的一些软件包,我会收到警告和无法访问库(doMC).如下图所示,我对subselect没有问题,因此没有文件/目录权限问题.还试过repo = http://cran.us.r-project.org和其他人,没有运气.请指教.
ps:对于意想不到的日文字符,我不知道; 我认为这是一个可分离的问题; 尚未得到support.rstudio.org/help/discussions/problems/6009-japanese-characters-show-unexpectedly的回复
> install.packages('doMC')
Warning in install.packages :
package ?oMC?is not available (for R version 3.0.0)
Installing package into ?:/Users/YULE/Documents/R/win-library/3.0?(as ?ib?is unspecified)
Warning in install.packages :
package ?oMC?is not available (for R version 3.0.0)
> install.packages('subselect')
Installing package into ?:/Users/YULE/Documents/R/win-library/3.0?(as ?ib?is unspecified)
trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.0/subselect_0.12-2.zip'
Content type 'application/zip' length 1295653 bytes (1.2 Mb)
opened URL
downloaded 1.2 Mb
package ?ubselect?successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\YULE\AppData\Local\Temp\Rtmp6DK5mn\downloaded_packages
> library(subselect)
--------------------------------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 如果在包的描述中仅导入(不依赖)foreach,如何在包的功能中避免"找不到函数"%dopar%""?有没有像foreach ::%dopar%的方式,因为我在函数中使用foreach :: foreach?谢谢.
代码如:
在功能上
foreach::foreach(1:9) %dopar% {
...}
Run Code Online (Sandbox Code Playgroud)
在描述中
Imports:
Matrix,
parallel,
foreach,
doParallel
Run Code Online (Sandbox Code Playgroud) 我在Rstudio中使用R 3.3.1的Win7 OS.意图是glmnet与并行处理一起使用.从?glmnet帮助:
parallel:如果TRUE,使用平行的foreach适合每个折叠.必须事先注册并行,例如doMC或其他.请参阅下面的示例.
从引用的例子:
# Parallel
require(doMC)
registerDoMC(cores=4)
Run Code Online (Sandbox Code Playgroud)
install.packages('doMC')返回包不可用.手动检查CRAN可提供可下载的UNIX代码,但Windows二进制文件不可用.
我仍然可以doMC在我的Win7操作系统下使用相同的代码或什么是有用的替代方案?
doMC的文档似乎非常稀疏,仅列出了doMC-package和registerDoMC().我遇到的问题是我会通过doMC/foreach产生几个工作者,但是当工作完成后,他们只是坐在那里占用内存.我可以去寻找他们的进程ID,但我经常意外地杀死主进程.
library(doMC)
library(foreach)
registerDoMC(32)
foreach(i=1:32) %dopar% foo()
##kill command here?
Run Code Online (Sandbox Code Playgroud)
我试过跟随registerDoSEQ(),但它似乎没有杀掉进程.
我有一个案例,foreach使用doMC后端在不同的机器上产生不同的行为.
在运行Ubuntu 12.04.4 LTS的Linux服务器上,以下代码(改编自foreach vingette)在单个内核上同时运行5个作业,这不是所需的行为.
library(foreach)
library(doMC)
registerDoMC(cores=5)
getDoParWorkers()
x <- iris[which(iris[,5] != "setosa"), c(1,5)]
trials <- 10000
r <- foreach(icount(trials), .combine=cbind) %dopar% {
ind <- sample(100, 100, replace=TRUE)
result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit))
coefficients(result1)
}
Run Code Online (Sandbox Code Playgroud)
会话信息:
> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=C LC_COLLATE=C LC_MONETARY=C
[6] LC_MESSAGES=C LC_PAPER=C LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=C LC_IDENTIFICATION=C
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other …Run Code Online (Sandbox Code Playgroud) 我在R中构建了一个函数(运行在Ubuntu 12.04 LTS 64位,4核i7服务器,多线程和6gb ram),我使用标准软件包安装了R:
sudo apt-get install r-base r-recommended r-base-dev
sudo apt-get install r-cran-multicore r-cran-iterators r-cran-foreach r-cran-domc
Run Code Online (Sandbox Code Playgroud)
注:我也安装foreach及doMC内部R(它没有帮助),像我安装的deldir软件包:
install.packages(c("deldir"), dependencies = TRUE)
Run Code Online (Sandbox Code Playgroud)
我的函数运行正常,但它不使用并行核心(只需最多输出8个):
library(deldir)
library(foreach)
library(doMC)
registerDoMC(cores=8)
#getDoParWorkers()
#getDoParName()
#getDoParVersion()
# loop through files
inputfiles <- dir(path="/home/geoadmin/data/objects/", pattern='.txt')
for( inputfilenr in 1:length(inputfiles))
{
# set file variables
curinputfile = paste("/home/geoadmin/data/objects/",inputfiles[[inputfilenr]], sep = "", collapse = NULL)
print (curinputfile)
curoutputfile = paste("/home/geoadmin/data/objects/",substr(inputfiles[[inputfilenr]], start=1, stop=10), '.out', sep = "", collapse = NULL)
# select the …Run Code Online (Sandbox Code Playgroud) 我有一个R代码,涉及几个foreach工作者并行执行某些任务.我为此目的使用foreach和doMC.我想让每个foreach工作人员招募一些新的工作人员,并将可以并行化的代码的一些部分分发给他们.
当前代码如下:
require(doMC)
require(foreach)
registerDoMC(cores = 8)
foreach (i = (1:8)) %dopar% {
<<some code here>>
for (j in c(1:4)) {
<<some other code here>>
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个理想的代码,看起来像:
require(doMC)
require(foreach)
registerDoMC(cores = 8)
foreach (i = (1:8)) %dopar% {
<<some code here>>
foreach (j = (1:4)) %dopar% {
<<some other code here>>
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里看到了使用doSNOW和doMC的多范式并行性的一个例子(https://www.rmetrics.org/files/Meielisalp2009/Presentations/Lewis.pdf#page=17).但是,我不知道它是否符合我的要求.
而且,似乎嵌套的foreach不适用,因为它需要合并两个循环(见这里),而在我的情况下,这不是首选; 第二个循环只能帮助第一个循环代码的一部分.如果我错了,请纠正我.
谢谢.
我有一个大型数据库(~100Gb),我需要从中提取每个条目,对其执行一些比较,然后存储这些比较的结果。我尝试在单个 R 会话中运行并行查询,但没有成功。我可以同时运行多个 R 会话,但我正在寻找更好的方法。这是我尝试的:
library(RSQLite)
library(data.table)
library(foreach)
library(doMC)
#---------
# SETUP
#---------
#connect to db
db <- dbConnect(SQLite(), dbname="genes_drug_combos.sqlite")
#---------
# QUERY
#---------
# 856086 combos = 1309 * 109 * 6
registerDoMC(8)
#I would run 6 seperate R sessions (one for each i)
res_list <- foreach(i=1:6) %dopar% {
a <- i*109-108
b <- i*109
pb <- txtProgressBar(min=a, max=b, style=3)
res <- list()
for (j in a:b) {
#get preds for drug combos
statement <- paste("SELECT * from combo_tstats …Run Code Online (Sandbox Code Playgroud) domc ×12
r ×11
foreach ×7
doparallel ×2
amazon-ec2 ×1
memory ×1
multicore ×1
package ×1
plyr ×1
progress-bar ×1
rsqlite ×1
ubuntu ×1
windows ×1