我正在尝试使用rpy2从python调用R代码。在尝试一些代码时,我意识到我可以使用rpy2.robjects.r()
来定义R函数(注意()
而不是[]
,我正在调用r
)。以这种方式定义的函数可以在rpy2.robjects.r
和rpy2.robjects.globalenv
上编制索引。但是pi
似乎不是这种情况。我可以rpy2.robjects.r['pi']
,但我不能rpy2.robjects.globalenv['pi']
:
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
为什么会这样?
答案 0 :(得分:1)
rpy2对象r
旨在表示&#34; R&#34;运行嵌入式。您可以在调用中传递一个字符串(例如r("1+2")
),该字符串将被评估为R代码并返回输出。
另一方面,globalenv
是R&#34;环境&#34; .Globalenv
。当你在R终端中声明对象时,这基本上就是对象。 R代码可以使这更清楚:
x <- 1
# get "x" back, the less-easy way
get("x", .GlobalEnv)
在R控制台中执行pi
时,首先会在.GlobalEnv中搜索符号,如果找不到,则会搜索&#34;搜索路径&#34; (将加载的库)将被搜索。 pi
位于R包&#34; base&#34;,IIRC中。
pi # returns 3.14...
pi <- "abc"
pi # return "abc"