tm_map在Mac上的R 3.0.1中出现了parallel::mclapply错误

17

我正在使用平台为x86_64-apple-darwin10.8.0(64位)的R 3.0.1。

我尝试使用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个回答

29

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

stemDocument(crude[[1]])

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

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

所以我只是安装了SnowballC,然后它就工作了。显然,SnowballC应该是一个依赖项。


17

我遇到了这个问题,经过一番挖掘,我找到了问题的原因。

  1. 我的代码中有这样一行: 'rdevel <- tm_map(rdevel, asPlainTextDocument)'

  2. 运行时出现错误:

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

  1. 原来是因为'tm_map'调用了'parallel'中的一些代码,尝试着获取你的CPU核心数量。要查看它所想的,请输入以下命令:
    > getOption("mc.cores", 2L)
    [1] 2
    >

  1. 恍然大悟!让'tm_map'调用只使用一个核心即可!
    > 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
    > 

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


11
我在这个问题中找到了一个对我有效的答案: Charles Copley在他的答案中指出,他认为新的tm包需要显式地定义lazy = TRUE
所以,您的代码应如下所示。
library(tm)
data('crude')
tm_map(crude, stemDocument, lazy = TRUE)

我也试过不用SnowballC来确定它是否是这两个答案的组合。但无论如何,似乎都没有影响结果。


3

我一直面临同样的问题,但最终解决了。我的猜测是,如果我将语料库命名为“长名称”或“公司新闻语料库”,我会遇到问题,但如果我将语料库值命名为“a”,它就可以正常工作。非常奇怪。

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

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")) 

3
我在使用Mac OS X 10.10.5上的Intel四核I7时,在tm中遇到了同样的问题,得到以下警告信息:

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

我是在下载Twitter数据后创建语料库时遇到该问题。
Charles Copley的解决方案也适用于我。我在创建了语料库之后使用tm_map(*filename*, stemDocument, lazy = TRUE),然后tm就能正常工作了。

1
我在使用tm库的removeWords函数时遇到了同样的问题。有些其他答案,比如将核心数设置为1,可以用于删除一组英语停用词,但是我还想从我的语料库中删除一个自定义的名字和姓氏列表,而这些列表每个都超过10万个单词。
没有其他建议可以解决这个问题,经过一些试错,发现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调用所示。希望这可以帮助!

0

我正在处理 Twitter 数据,当我试图使用 tm_map() 函数将所有文本转换为小写时,遇到了与原始问题相同的错误。

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

安装和加载SnowballC包完全解决了问题。希望这可以帮到你。

-1

虽然与这个问题略有关联,但对我有用的解决方法是在Windows 10中以管理员身份运行R并重试安装,这次安装成功了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接