如何提取RS4' Rpy2中的元素

时间:2015-04-12 03:13:04

标签: geospatial rpy2

我是“使用R进行应用空间数据分析”一书的中文读者,这对空间分析工作非常有用。我试图用Rpy2将R代码翻译成python,因为python可以处理更复杂的数据源。但是我的Rpy2代码有问题。 NY8数据附在电子邮件中。 R代码是:

library(rgdal)
NY8<-readOGR(".","NY8_utm18")
Syracuse<-NY8[NY8$AREANAME=="Syracuse city",]
Sy2_nb<-poly2nb(Syracuse,queen=FALSE)
library(spdep)
Sy2_nb<-poly2nb(Syracuse,queen=FALSE)
Sy2_lw<-nb2listw(Sy2_nb)
moran.plot(NY$POP8,Sy2_lw)

当我用Rpy2翻译它时,代码是:

>>> from rpy2.robjects.packages import importr
>>> utils = importr('utils')
>>> utils.install_packages('rgdal')
>>> rgdal=importr('rgdal')
>>> import os
>>> os.chdir("C:\\PYDATA\\NY")
>>> NY8=rgdal.readOGR(".","NY8_utm18")
>>> print(robjects.r['summary'](NY8))

当我想翻译代码“Syracuse&lt; -NY8 [NY8 $ AREANAME ==”Syracuse city“,] “,例如:

>>>Syracuse=NY8[NY8$AREANAME=="Syracuse city",]

显示错误消息:SyntaxError:语法无效 我似乎无法通过“$”提取“AREANAME”,因为“$”在python中是非法的。

2 个答案:

答案 0 :(得分:1)

无法获得已接受的工作答案所以写了这个函数:

def subset_RS4(rs4, subset):
    subset_func = r("""function(o, s){
    o[s]
    }
    """)
    return subset_func(rs4, subset)

现在,您可以将您的对象作为第一个arg调用subset_RS4,将子集调用为另一个。

我正在使用它:

subset1 = r[">"](r["width"](peaks1), args.min_width)
print(subset_RS4(peaks1, subset1))

答案 1 :(得分:0)

使用方法rx2http://rpy.sourceforge.net/rpy2/doc-2.5/html/vector.html#extracting-r-style):

NY8.rx2("AREANAME")

如果这是一个S4对象(你的评论建议如此),一个简单的方法就是获取通用的“$”并将其用作函数。

base = importr("base")
# "$" is not a syntactically valid name for a Python function,
# so we fetch it form the instance's dictionary of attributes

dollar = base.__dict__["$"]
dollar(NY8, "AREANAME")