2010-12-02 15 views
14

Pythonには、セット、ディクテーション、リスト、タプルなどの豊富な組み込み型があるので、以前はPythonが好きでした。これらの構造は、データを処理するための短いスクリプトを作成するのに役立ちます。他方の側で汎用プログラミング言語としてのR

、Rは、MATLABのようであり、そのデータ型としてスカラー、ベクトル、データフレーム、アレイ及びリストを有しています。しかし、それはセット、辞書、タプルなどが欠けています。私はリストの種類が強力であることを知っています、多くの操作はリスト処理と考えることができます。しかし、Rを汎用言語として使用するという考え方はまだ曖昧です。

(以下は単なるです。私はテキスト処理/マイニングに焦点を当てていることを意味するわけではありません。)

例えば、私はニュース記事のセットに対してカウントTF-IDFを行う必要があります(200,000言いますフォルダ内の記事とそのサブフォルダ)。

私はファイルを読んだ後、私は言葉ツーIDマッピングおよびその他の集計作業を行う必要があります。これらの作業には、文字列の操作や、setやmapなどのコンテナが必要です。

私はこれらの処理を行い、Rにデータをロードするために別の言語を使うことができると知っています。しかし、おそらく(小さなもののために)すべての前処理を1つのRスクリプトに入れる方が良いでしょう。

だから私の質問は、Rは、言語レベルでの豊富なデータ構造のこの種では十分な能力を有しているんですか?そうでない場合は、どのパッケージもR言語の拡張機能を提供しますか?

+1

あなたの質問に直接答えはありませんが、rpy2のようなことは気付いていますか? PythonオブジェクトをRオブジェクトに変換し、R関数を使用することができます。だから、Pythonの処理をしてから、Rの処理を同じスクリプトで行うことができます。 –

+0

@トーマスあまり解決策ではありません。私の懸念は、Rに固執し、可能な限り少ない外的なものを使用したいということです。特に私が自分のコードを書いたとき、エンドユーザーだけがR. –

+0

セットをインストールする必要があるならば、 'sets'パッケージで利用可能です。ベクトルには名前付き要素があるため、ほとんどの目的でdictsと非常によく似た動作をします。 (IDと値の列を持つdata.frameもdictとして機能します) –

答えて

21

私は、Rのデータ前処理機能、つまりそのソースからのデータを抽出することから、分析ステップの直前までのすべてが改善されていると思います実質的に過去3年間(私はRを使用していた時間の長さ)。私は毎日Pythonを使い、過去7年間、テキスト処理能力が優れていますが、あなたが言及したタスクの種類にRを使用することを躊躇しません。

しかし、いくつかの条件があります。まず、私はあなたのQにおける一連のタスクのために外部パッケージのカップルに非常に密接に見てお勧めします - 特に、ハッシュ(のpython-のようなキーと値のデータ構造)、およびstringr(ベースライブラリの少ないユーザーフレンドリーな文字列操作関数上ラッパーの大部分からなる)

両方stringrハッシュCRANで利用可能です。

> library(hash) 
> dx = hash(k1=453, k2=67, k3=913) 
> dx$k1 
    [1] 453 
> dx = hash(keys=letters[1:5], values=1:5) 
> dx 
    <hash> containing 5 key-value pair(s). 
    a : 1 
    b : 2 
    c : 3 
    d : 4 
    e : 5 

> dx[a] 
    <hash> containing 1 key-value pair(s). 
    a : 1 

> library(stringr) 
> astring = 'onetwothree456seveneight' 
> ptn = '[0-9]{3,}' 
> a = str_extract_all(astring, ptn) 
> a 
    [[1]] 
    [2] "456" 

テキスト処理およびテキスト分析は、日々の仕事の重要な部分を含み、誰のためにRのユーザーの大規模なサブセットがあることもそうです - CRANのNatural Language Processing Task View(約20の1によって証明されるようにそのような非公式のドメイン指向のパッケージコレクション)。タスクビューには、テキストマイニング用の関数専用のパッケージtmがあります。 TMは、またあなたQ.

で述べたものとして処理タスクのために最適化された機能であるに含まれ、Rは、合理的に大規模なデータセット(例えば、> 1ギガバイト)に対話的に作業するためのパッケージの優れた選択をしています多くの場合、並列処理インフラストラクチャを設定する必要はありません(ただし、利用可能な場合は確かにクラスタを利用できます)。私の意見では、これらの中で最も印象的なのは、Yaleのマイケル・ケーンとジョン・エマーソンの "The Bigmemory Project"(CRAN)このプロジェクトはbigmemory、biganalytics、synchronicity、bigtabulate、bigalgebraを包含しています。まとめると、これらのパッケージの背後にある技術には以下のものが含まれます。(i)共有メモリにデータを割り当てます。これにより、別々の並行プロセスによる共有アクセスの調整が可能になります。 (ii)ファイルバックアップされたデータ構造(私は信じているが確かではないが、メモリマップされたファイル構造と同義であり、ポインタを使ってディスクから非常に高速なアクセスを可能にし、 。

でも、Rの標準ライブラリの関数とデータ構造のかなりの部分が、通常のRAM制限に近いデータと対話的に作業することが容易になります。例えば、.RData、ネイティブバイナリ形式は、使用することも可能と同じくらい簡単です(コマンドは保存して負荷です)、それは優れた圧縮があります。

> library(ElemStatLearn) 
> data(spam) 
> format(object.size(spam), big.mark=',') 
    [1] "2,344,384" # a 2.34 MB data file 
> save(spam, file='test.RData') 

このファイルに、「テスト。 RData 'は、176KB10倍圧縮のみです。

+0

+1 - すばらしい答え!私はかなりのことをそこで学んだ。 – Chase

+0

+1私は 'hash'と' tm'パッケージを指してくれてありがとう –

3

これは、Rはセット、dicts、リストやタプルを欠いていることだけで本当ではありません。それらはいくつかの他の構造として実装されています。もちろん、パフォーマンスは問題になるかもしれませんが、通常はPythonのものより悪くはありません。通常は、ソリューションが効率的なCコードとしてコード化されたパッケージを見つけることができます。

私は、テキストマイニングについて多くを知らないが、tmパッケージには、あなたが望むものを含んでいてもよいです。

2

あなたはNatural Language Processing Task Viewをご覧ください。

トピック見出し:

音声学と音声処理:
字句データベース:
キーワード抽出および一般的な文字列操作:
自然言語処理:
文字列カーネル:
テキストマイニング:

関連する問題