如何提取Rpy2中的'RS4'元素
How to extract 'RS4' element in Rpy2
我是《Applied Spatial Data Analysis with R》这本书的中国人reader,这本书对空间分析工作非常有用。我尝试用 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<-NY8[NY8$AREANAME=="Syracuse city",]
”,例如:
>>>Syracuse=NY8[NY8$AREANAME=="Syracuse city",]
显示错误消息:SyntaxError: invalid syntax
看来我无法通过“$”提取“AREANAME”,因为“$”在python.
中是非法的
使用方法rx2
(https://rpy2.github.io/doc/latest/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")
无法得到可接受的答案,所以写了这个函数:
def subset_RS4(rs4, subset):
subset_func = r("""function(o, s){
o[s]
}
""")
return subset_func(rs4, subset)
现在您可以调用 subset_RS4
,将您的对象作为第一个参数,将子集作为另一个参数。
我是这样使用的:
subset1 = r[">"](r["width"](peaks1), args.min_width)
print(subset_RS4(peaks1, subset1))
我是《Applied Spatial Data Analysis with R》这本书的中国人reader,这本书对空间分析工作非常有用。我尝试用 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<-NY8[NY8$AREANAME=="Syracuse city",] ”,例如:
>>>Syracuse=NY8[NY8$AREANAME=="Syracuse city",]
显示错误消息:SyntaxError: invalid syntax 看来我无法通过“$”提取“AREANAME”,因为“$”在python.
中是非法的使用方法rx2
(https://rpy2.github.io/doc/latest/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")
无法得到可接受的答案,所以写了这个函数:
def subset_RS4(rs4, subset):
subset_func = r("""function(o, s){
o[s]
}
""")
return subset_func(rs4, subset)
现在您可以调用 subset_RS4
,将您的对象作为第一个参数,将子集作为另一个参数。
我是这样使用的:
subset1 = r[">"](r["width"](peaks1), args.min_width)
print(subset_RS4(peaks1, subset1))