2017-08-22 2 views
1

私は10M以上の文書を含む大きなコーパスを持っています。mc.cores引数を使用するためのtm_mapを取得できません

Error in FUN(content(x), ...) : unused argument (mc.cores = 10) 

私は私の現在のホストされたRのスタジオで15個の利用可能なコアを持っている:私はmc.cores引数を使用して複数のコアを超える変換をしようとするたびに、私はエラーを取得します。私は

library(tidyverse) 
library(qdap) 
library(stringr) 
library(tm) 
library(textstem) 
library(stringi) 
library(SnowballC) 

例えばをtm_map使用して変換を行うためにしようとすると何が起こるか

# I have a corpus 
> inspect(corpus[1]) 
<<VCorpus>> 
Metadata: corpus specific: 0, document level (indexed): 0 
Content: documents: 1 

[[1]] 
<<PlainTextDocument>> 
Metadata: 7 
Content: chars: 46 

> length(corpus) 
[1] 10255313 

ウォッチ形質転換後、遅延加算試み

> corpus <- tm_map(corpus, content_transformer(replace_abbreviation), mc.cores = 10) 
Error in FUN(content(x), ...) : unused argument (mc.cores = 10) 

= T

corpus <- tm_map(corpus, content_transformer(replace_abbreviation), mc.cores = 10, lazy = T) # read the documentation, still don't really get what this does 

Iが例えば行けば私はなるだろう前に、一方

> corpus[[1]][1] I get: 
Error in FUN(content(x), ...) : unused argument (mc.cores = 10) 

> corpus.beforetransformation[[1]][1] 
$content 
[1] "here is some text" 

は、私がここで間違って何をしているのですか?より多くのプロセッサを使用するにはどうすればmc.cores引数を使用できますか?

再現例:tm documentationから

sometext <- c("cats dogs rabbits", "oranges banannas pears", "summer fall winter") %>% 
    data.frame(stringsAsFactors = F) %>% DataframeSource %>% VCorpus 

corpus.example <- tm_map(sometext, content_transformer(replace_abbreviation), mc.cores = 2, lazy = T) 
corpus.example[[1]][1] 
+0

一つは、tm_map' 'に渡される追加の引数は...' 'FUN'に渡される'経由。したがって、あなたの 'mc.cores'引数は' content_transformer(replace_abbreviation) 'に渡されます。私は*あなたがパラレルパッケージを使ってクラスタを登録し、tmパッケージにそのクラスタを使うように伝えるために 'tm_parLapply_engine'関数を使う必要があるかもしれないと思いますが、それはやや投機的です。 –

+0

mc.cores引数をcontent_transformerに移動しようとしましたが、同じエラーが発生しました。 REをクラスタに登録すると...私は奇妙な印象を与えますか?最初にクラスタを作成してこのタスクを開始し、別のSO投稿を介して、その代わりにmc.cores argを使用するように指示されました –

+0

詳細については、14ページのtmパッケージドキュメントを参照してください。 https://cran.r-project.org/web/packages/tm/tm.pdf –

答えて

2

、以下を試してみてください。

options(mc.cores = 10) # or whatever 
tm_parLapply_engine(parallel::mclapply) # mclapply gets the number of cores from global options 
tm_map(sometext, content_transformer(replace_abbreviation)) 
+0

これを今実行すると、すべてのteプロセッサがシェル内で点灯しているのがわかります。私は今すぐ出てきました!結果が期待通りであるかどうかを見てみましょう。二番目の行は正確に何をしていますか? –

+0

'tm_parLapply_engine'は、並列化にtmが使用するメソッドを設定します。 'NULL'を渡すと' lapply'(並列処理なし)だけが使用されます。 –

+0

@DougFirこれがあなたの質問に答えた場合は、回答をアップアップしてください。 – G5W

関連する問題