【问题标题】:How to extract 'RS4' element in Rpy2如何在 Rpy2 中提取“RS4”元素
【发布时间】:2015-04-12 03:13:04
【问题描述】:

我是《Applied Spatial Data Analysis with 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

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

显示错误信息:SyntaxError: invalid syntax 看来我无法通过“$”提取“AREANAME”,因为“$”在python中是非法的。

【问题讨论】:

    标签: python geospatial rpy2


    【解决方案1】:

    无法得到接受的答案,所以写了这个函数:

    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))
    

    【讨论】:

      【解决方案2】:

      使用方法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")
      

      【讨论】:

      • 谢谢!我尝试了代码,但显示错误消息“AttributeError:'RS4'对象没有属性'rx2'”。
      • 谢谢!我尝试了“dollar = base.__dict("$")”,但显示了错误消息“TypeError: 'dict' object is not callable”。
      • 错字。 "(" -> "["。固定
      • 非常感谢!它适用于“print(dollar(NY8, "AREANAME"))”。
      • 很好的解决方案!不过有一件事,与此同时,S4 方法由@ 而不是$ 访问。
      猜你喜欢
      • 1970-01-01
      • 2021-01-02
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2015-03-10
      相关资源
      最近更新 更多