私はPythonからRコードを呼び出すためにrpy2を試していました。いくつかのコードを試してみたところ、rpy2.robjects.r()
のR関数([]
の代わりに()
の通知、私はr
と呼んでいます)を定義できます。このように定義された関数は、rpy2.robjects.r
とrpy2.robjects.globalenv
の両方で索引付けできます。しかし、これはpi
の場合には当てはまりません。私はrpy2.robjects.r['pi']
を行うことができますが、私はrpy2.robjects.globalenv['pi']
を行うことはできません。`rpy2.robjects.r`と` rpy2.robjects.globalenv`の相違点
robjects.r("""
f <- function(){
print("Hello World!!!")
}
""")
#function f is defined using rpy2.robjects.r() and can be
#accessed using rpy2.robjects.globalenv[]
#(as well as using rpy2.robjects.r[])
f = robjects.globalenv["f"]
print(f()) #Hello World!!!
#pi which can be accessed as rpy2.robjects.r[] cannot be
#accessed as rpy2.robjects.globalenv[]
print(robjects.r['pi']) #3.141593
print(robjects.globalenv['pi']) #Error: object 'pi' not found
それがそうであるのはなぜ?
* "rpy2オブジェクト' r'は埋め込まれた "R"を表しています。 "*したがって、技術的には' robjects.globalenv'よりもさらに広い範囲ですか?これはプレーンRで同じ動作ですか?私は普通のRで、すべてのローカルスコープが失敗したときにすべてのものが 'Globalenv'に対して評価されると思います。 rpy2の 'robjects.r'はパッケージをソーシングし、その内部を参照するようですか? – Mahesha999
文書を確認しましたか? (http://rpy2.readthedocs.io/en/version_2.8.x/introduction.html#the-r-instance、http://rpy2.readthedocs.io/en/version_2.8.x/robjects_rinstance.html 、http://rpy2.readthedocs.io/en/version_2.8.x/robjects_environments.html) – lgautier