![](/img/trans.png)
[英]pandas and rpy2: Why does ezANOVA work via robjects.r but not robjects.packages.importr?
[英]Difference between `rpy2.robjects.r` and `rpy2.robjects.globalenv`
我正在尝试rpy2从python调用R代码。 在尝试一些代码时,我意识到可以在rpy2.robjects.r()
使用R函数(用Notice ()
代替[]
,我正在调用r
)。 以这种方式定义的函数可以在rpy2.robjects.r
和rpy2.robjects.globalenv
上rpy2.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.