11

私はJavaプログラマーではありません。私はRとC++をプログラムします。Rパッケージに含めたいJavaコードがいくつかあります。プログラムの基本は次のとおりです。

  1. 標準入力からデータを読み取ります。
  2. MCMCチェーンを実行します。
  3. ファイルに出力します。

これをRに変換して、Rからプログラムを実行できるようにします。Rcppパッケージに精通しており、その便利さのいくつかに慣れています。このコードの使い方を学ぶために、rJavaパッケージをどこから始めればよいですか。

具体的には、次の質問があります。

  1. RからJavaにデータを転送する方法(数値ベクトル、係数など)。
  2. クラスのメソッドを実行するにはどうすればよいですか?
  3. パッケージにJavaコードを含めるにはどうすればよいですか?

rJavaのドキュメントはあまり役に立ちません。誰かがこれに関するチュートリアルを持っていますか?

4

2 に答える 2

5

これを行うには「簡単な」方法と、これを行うのがやや難しい方法があります。私は単純な人間なので、単純な解決策に傾倒しています。

myCommand <- paste("/path/to/java", argument1, argument2, sep=" ")
system(shQuote(myCommand))

次に、R関数が意味をなすものを使用して出力ファイルを読み込みます。

やや難しい解決策は、Javaコードを編集して、stdinから読み取らないようにすることですが、ベクターまたは他のJavaオブジェクトが渡されます。Javaコードを変更する方法について一般化することはできませんが、Java関数に最終的にベクトルを供給する必要がある場合は、次のようにします。

.jinit()
v <- .jnew("java/util/Vector")
rVector <- as.character(1:10)
addToV <- function( item ){
  v$add( item )
}
sapply(rVector, addToV)

上記のように、rJavaで型を扱うのはかなり苦痛だといつも思っています。

時間を大幅に節約するためのヒントの1つは、次のとおりです。rJavaでJavaオブジェクトを作成したら、名前とドル記号を入力してタブを押すことで、そのメソッドを理解できます。したがって、上記で作成したvオブジェクトを使用して「v $」と入力すると、次のようになります。

1> v$
v$add(                 v$hashCode()           v$contains(            v$size()               v$elementAt(           v$capacity()           v$containsAll(         v$firstElement()       v$removeElement(       v$iterator()           v$wait()
v$get(                 v$clone()              v$isEmpty()            v$toArray()            v$remove(              v$ensureCapacity(      v$removeAll(           v$insertElementAt(     v$removeElementAt(     v$listIterator()       v$getClass()
v$equals(              v$indexOf(             v$lastIndexOf(         v$toArray(             v$elements()           v$trimToSize()         v$retainAll(           v$lastElement()        v$setElementAt(        v$listIterator(        v$notify()
v$toString()           v$clear()              v$addAll(              v$addElement(          v$set(                 v$subList(             v$copyInto(            v$removeAllElements()  v$setSize(             v$wait(                v$notifyAll()
1> v$

幸運を祈ります。特定の問題がある場合は、必ず大声で叫んでください。

于 2011-04-26T21:12:46.993 に答える
3

これについては、Deducerプラグイン開発ドキュメントで説明されています。Deducerを拡張するパッケージを対象としていますが、一部のセクションは一般的です。

RでJavaメソッドを実行する: http ://www.deducer.org/pmwiki/pmwiki.php?n = Main.Development#wwjoir

RオブジェクトをJavaに取り込み、Javaコードを使用してパッケージを作成します: http ://www.deducer.org/pmwiki/pmwiki.php?n = Main.Development#suaptijc

完全な開示:Deducerは私のプロジェクトです。

于 2011-04-25T23:12:29.077 に答える