tm_map在Mac上的R 3.0.1中有parallel :: mclapply错误

时间:2013-08-17 10:55:25

标签: r parallel-processing tm mclapply

我在平台上使用R 3.0.1:x86_64-apple-darwin10.8.0(64位)

我正在尝试使用tm库中的tm_map。但是当我执行这段代码时

library(tm)
data('crude')
tm_map(crude, stemDocument)

我收到此错误:

Warning message:
In parallel::mclapply(x, FUN, ...) :
  all scheduled cores encountered errors in user code

有没有人知道这方面的解决方案?

8 个答案:

答案 0 :(得分:29)

我怀疑您没有安装SnowballC软件包,这似乎是必需的。 tm_map应该使用stemDocument在所有文档上运行mclapply。尝试在一个文档上运行stemDocument函数,以便提取错误:

stemDocument(crude[[1]])

对我来说,我收到了一个错误:

Error in loadNamespace(name) : there is no package called ‘SnowballC’

所以我继续安装SnowballC并且它有效。显然,SnowballC应该是一种依赖。

答案 1 :(得分:17)

我刚碰到这个。它花了我一些挖掘但我发现了发生了什么。

  1. 我有一行代码'rdevel< - tm_map(rdevel,asPlainTextDocument)'

  2. 运行此操作会产生错误

  3. 
        In parallel::mclapply(x, FUN, ...) :
          all scheduled cores encountered errors in user code
    
    
    1. 事实证明'tm_map'调用'parallel'中的一些代码,试图找出你拥有多少个核心。要查看它的想法,请键入
    2. 
          > getOption("mc.cores", 2L)
          [1] 2
          >
      
      
      1. 啊哈时刻!告诉'tm_map'调用只使用一个核心!
      2. 
            > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=1)
            Error in match.fun(FUN) : object 'asPlainTextDocument' not found
            > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=4)
            Warning message:
            In parallel::mclapply(x, FUN, ...) :
              all scheduled cores encountered errors in user code
            > 
        
        

        所以...有多个核心,而不是给你错误信息,'parallel'只是告诉你每个核心都有错误。没有帮助,平行! 我忘记了点 - 函数名称应该是'as.PlainTextDocument'!

        所以 - 如果你收到此错误,请在'tm_map'调用中添加'mc.cores = 1'并再次运行。

答案 2 :(得分:11)

我在question找到了一个对我来说成功的答案: Charles Copley在他的answer中表示他认为新的tm包需要明确定义lazy = TRUE

所以,你的代码看起来像这样

library(tm)
data('crude')
tm_map(crude, stemDocument, lazy = TRUE)

我也尝试过没有SnowballC,看看它是否是这两个答案的组合。它似乎没有影响结果。

答案 3 :(得分:3)

我一直面临同样的问题,但最终还是修好了。我的猜测是,如果我将语料库命名为&#34; longName&#34;或者&#34; companyNewsCorpus&#34;,我得到了这个问题,但是如果我使用语料库值作为&#34; a&#34;,它运作良好。真的很奇怪。

下面的代码提供了此线程中提到的相同错误消息

companyNewsCorpus  <-Corpus(DirSource("SourceDirectory"),
                            readerControl = list(language="english"))
companyNewsCorpus <- tm_map(companyNewsCorpus, 
                            removeWords, stopwords("english")) 

但是如果我在下面转换它,它可以毫无问题地工作。

a  <-Corpus(DirSource("SourceDirectory"), 
            readerControl = list(language="english"))
a <- tm_map(a, removeWords, stopwords("english")) 

答案 4 :(得分:3)

我使用在Mac OS X 10.10.5上运行的英特尔四核I7在tm_map(*filename*, stemDocument, lazy = TRUE)遇到了同样的问题,并收到以下警告:

  

在mclapply(content(x),FUN,...)中,计划的核心1在用户代码中遇到错误,该作业的所有值都将受到影响

我在下载Twitter数据后创建了一个语料库。

Charles Copley的解决方案也适用于我。 我在创建语料库后使用了{{1}},然后tm正常工作。

答案 5 :(得分:1)

在使用tm库的removeWords函数时,我也遇到了同样的问题。其他一些答案,例如将核心数设置为1,确实可以删除一组英语停用词,但是我还要删除我的语料库中的名字和姓氏的自定义列表,这些列表超过100,000每个字都很长。

其他任何建议都没有帮助解决这个问题,事实证明,通过一些试验和错误,removeWords似乎在向量中限制了1000个单词。所以我写了这个功能,为我解决了这个问题:

# Let x be a corpus
# Let y be a vector containing words to remove
removeManyWords <- function (x, y) {

      n <- ceiling(length(y)/1000)
      s <- 1
      e <- 1000

      for (i in 1:n) {

            x <- tm_map(x, content_transformer(removeWords), y[s:e])
            s <- s + 1000
            e <- e + 1000

      }

      x

 }

此函数基本上计算我想要移除的单词向量中有多少单词,然后将其除以1000并向上舍入为最接近的整数n。然后我们循环遍历单词向量以删除n次。使用此方法,我不需要使用lazy = TRUE或更改要使用的核心数,这可以从函数中的实际removeWords调用中看出。希望这有帮助!

答案 6 :(得分:0)

我正在研究Twitter数据,并且在尝试使用tm_map()函数将所有文本转换为较低时,在原始问题中出现了同样的错误

Warning message: In parallel::mclapply(x, FUN, ...) :   
all scheduled cores encountered errors in user code

安装和加​​载包SnowballC完全解决了问题。希望这会有所帮助。

答案 7 :(得分:-1)

与此问题稍有关系,但对我来说固定的是 库(SnowballC)中的错误:Windows 10中没有名为“ SnowballC”的程序包以管理员身份执行R并重试安装,这次它可以正常工作