私はRパッケージ内で参照クラスを生成することを試みていますが、それはかなり困難です。参照クラスを動的に生成
私は動的にスキーマを読み込み、関連する参照クラスを自動的に生成することを望んでいるパッケージを作成しています(SOAPと思う) 。もちろん、これは、私がパッケージソースの中で自分の参照クラスを事前に定義することができないことを意味します。
は、私は当初、単純なを使用して新しいクラスを作成しようとしました:対話的に実行されますが、パッケージのソースに含まれたとき、私はlocked binding
エラーを取得するときはもちろん、正常に動作し、
myClass <- setRefClass("NewClassName", fields=list(fieldA="character"))
。私の読んだところでは、これは対話的に実行すると、クラス情報がロックされていないグローバル環境に格納されているため、パッケージのベース環境がロックされているために発生します。
私は、その後の効果に何かを使用して提案されたスレッドが見つかりました:
myClass <- setRefClass("NewClassName", fields=list(fieldA="character"), where=globalenv())
私はパッケージをビルドしようとしたとき、これは実際にR /メーカークラッシュしたので、私はエラーのログを持っていません残念ながらそれは発生しましたが、確かに機能しませんでした。
次へ私は、これらの参照クラスを格納するために使用できるパッケージ内に新しい環境を作成しようとしました。だから私は(ない任意の関数の内部で)私のパッケージソースで.classEnv <- new.env()
行を追加し、新しい参照クラスを作成するときに、このクラスを使用しようとしました:
myClass <- setRefClass("NewClassName", fields=list(fieldA="character"), where=.classEnv)
これは実際にOK動作するように見えますが、次の警告を生成し、 :
> myClass <- setRefClass("NewClassName", where=.classEnv)
Warning message:
In getPackageName(where) :
Created a package name, ‘2013-04-23 10:19:14’, when none found
ので、何らかの理由で、methods::getPackageName()
は私の新しい環境がどのパッケージをピックアップすることはできないのですか?
getPackageName()
がパッケージを正しく認識できるように、新しい環境を別に作成する方法はありますか? getPackageName()
がパッケージを検出するために役立つ機能を追加できますか?警告に対処することができればこれが機能するのでしょうか、または動的に参照クラスを作成しようとして誤用していますか?
'?setRefClass'は'?setClass'に '?setClass'引数が渡され、これに' package'という引数があります。引数 'package = 'YourPackage''などで3番目のアプローチをしたいですか? –
チップ、マーティンありがとう。残念ながら、それはエラーを取り除くことができませんでした。 '.packageName'変数がまだ指定されていなければ、警告が出てくる' getPackageName'まで、パッケージ名が少しずつ流れていないようです。 –