これは非常に長い質問になります。では、ご容赦を
私は次のシナリオを持っています。物事をよりよく説明するために疑似コードを与える方が良いと思います
Pythonファイルはtest.pyと言う
def test(i):
from rpy2.robjects import r
r.source('r_file.R')
r.call_function(with some arguments)
#Some Operations
del r
ファイル: r_file.R
rm(list=ls(all=TRUE))
#some global variables
#some reference class
#creating an object of reference class
call_function = function(some arguments)
{
Do some processing
call few methods on a reference class
call some more methods and do some operations
rm(list=ls(all=TRUE))
gc()
return(0)
}
Python での関数 test の呼び出しは、'i' のいくつかの値に対して発生します。つまり、常に 1 より大きい i のいくつかの値に対して関数が呼び出されます。つまり、関数はmainから複数回呼び出されます。したがって、R ファイルを複数回ソースします。Python 関数を呼び出すたびに、新しい R インタープリターが必要でした。したがって、関数が呼び出されるたびに r をインポートし、rpy2 オブジェクトも削除します。
r 関数 "call_function" 内で、いくつかのメソッドを呼び出します。これにより、参照クラス オブジェクトが作成されます。
R コード内では、コードの最初と関数 some_function が終了するときに rm を使用します。
この背景を考えると、私が現在直面している問題は、rm がコード内の参照クラスを削除せず、このような警告が表示され続けることです。
In .removePreviousCoerce(class1, class2, where, prevIs) :
methods currently exist for coercing from "Rev_R5" to "envRefClass"; they will be replaced
ここで、Rev_R5 は参照クラスです。rm を使用して参照クラスに関連するすべてのメソッド、オブジェクトを削除する方法はありますか?