Использование mclapply в функции в пользовательском пакете R

Я использовал R Studio для создания пакета, используя эти два сайта в качестве руководства:

https://support.rstudio.com/hc/en-us/articles/200486488-Developing-Packages-with-RStudio https://www.r-bloggers.com/building-a-package-in-rstudio-is-actually-very-easy/

Единственная модификация - когда я создавал пакет с помощью R Studio, я использовал опцию для создания пакета R с помощью Rcpp.

Одной из функций в пакете является следующее:

GenerateSims = function(num.sim, alpha0, alpha1, beta1, gamma1, delta, n.sim, covariates, burnin, type)
{
  print("In GenerateSims")

  sims = mclapply(1:num.sim, function(z) {
    GenerateData(alpha0, alpha1, beta1, gamma1, delta, n.sim, covariates, burnin, type)
  },
  mc.cores = 35)

  print("Leaving GenerateSims...")
  return(sims)
}

когда mc.cores = 1 работает нормально. Когда я устанавливаю для mc.cores значение, отличное от 1, консоль печатает "In GenerateSims", но останавливается там, как если бы она находилась в бесконечном цикле.

Функция GenerateData использует только одну функцию из не базового пакета gamlss.dist::rDPO,

Мой файл DESCRIPTION выглядит следующим образом (не уверен, помогает ли это определить проблему или нет):

Package: Summer2017Package
Type: Package
Title: What the Package Does (Title Case)
Version: 0.1.0
Author: Who wrote it
Maintainer: The package maintainer <yourself@somewhere.net>
Description: More about what it does (maybe more than one line)
    Use four spaces when indenting paragraphs within the Description.
License: What license is it under?
Encoding: UTF-8
LazyData: true
Imports: Rcpp (>= 0.12.9), gamlss.dist, parallel, moments, stats
LinkingTo: Rcpp

РЕДАКТИРОВАТЬ: я запускаю это на машине под управлением Debian.

1 ответ

Решение

Итак, я понял, что внутри функции GenerateData существует оператор print. Я избавился от этого, и это исправило мою проблему. Я также наткнулся на этот пост, Печать из mclapply в R Studio, в котором упоминалось, что это не проблема при запуске R-скрипта из командной строки. Так что это легче исправить, чем избавиться от моих заявлений о печати.

Другие вопросы по тегам