繁体   English   中英

rpy2.robjects.r和rpy2.robjects.globalenv之间的区别

[英]Difference between `rpy2.robjects.r` and `rpy2.robjects.globalenv`

我正在尝试rpy2从python调用R代码。 在尝试一些代码时,我意识到可以在rpy2.robjects.r()使用R函数(用Notice ()代替[] ,我正在调用r )。 以这种方式定义的函数可以在rpy2.robjects.rrpy2.robjects.globalenvrpy2.robjects.r索引。 但是, 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

为什么会这样呢?

rpy2对象r表示运行嵌入的“ R”。 您可以在调用中向它传递一个字符串(例如r("1+2") ),该字符串将被评估为R代码,并返回输出。

另一方面, globalenv是R“环境” .Globalenv 在R终端中声明对象时,基本上就是对象到达的地方。 R代码可能更清楚:

x <- 1
# get "x" back, the less-easy way
get("x", .GlobalEnv)

在R控制台中执行pi时,将首先在.GlobalEnv中搜索该符号,如果未找到,则将搜索“搜索路径”的其余部分(已加载的库)。 pi在R包“ base”(IIRC)中。

pi # returns 3.14...
pi <- "abc"
pi # return "abc"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM