Python 关键字错误:使用rpy2在geoR中调用as.geodata函数
我正在处理的脚本中得到Python 关键字错误:使用rpy2在geoR中调用as.geodata函数,python,r,rpy2,geor,Python,R,Rpy2,Geor,我正在处理的脚本中得到SyntaxError:keyword不能是表达式 我使用Python中的rpy2(以及R包geoR)来处理使用R的数据库函数从PostgreSQL数据库检索的数据表。该数据是带有坐标的空间数据和两列数值数据,将用于地质统计模型 在数据库查询调用之后,dataframe对象x如下所示: easting northing location attrib1 attrib2 category 1 658394.3 204987.5 p1
SyntaxError:keyword不能是表达式
我使用Python中的rpy2
(以及R包geoR
)来处理使用R的数据库函数从PostgreSQL数据库检索的数据表。该数据是带有坐标的空间数据和两列数值数据,将用于地质统计模型
在数据库查询调用之后,dataframe对象x如下所示:
easting northing location attrib1 attrib2 category
1 658394.3 204987.5 p1 4.91 26.17 soil
2 658657.1 205116.7 p2 4.85 27.43 soil
...
我为geoR函数创建一个对象,如下所示:
easting northing location attrib1 attrib2 category
1 658394.3 204987.5 p1 4.91 26.17 soil
2 658657.1 205116.7 p2 4.85 27.43 soil
...
从rpy2.robjects.packages导入导入
geo=importr('geoR'))
将geoR函数调用为
y=geo.as_geodata(x)
工作,但没有参数data.col,它将位置属性指定为数据属性。(默认情况下,坐标属性后的第一列。)
尝试:
y=geo.as_geodata(x,geo.data_col="4:5")
产生:
SyntaxError: keyword can't be an expression
我似乎绕不开它。我在这里查看了一些帖子,并在网上查看了一下,但我无法理解这一条。我认为错误是因为您试图将两列传递给data\u col
命令。下面是一个使用gstat
包中的meuse
数据集的工作示例
import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
geo = importr('geoR')
gstat= importr("gstat")
robjects.r("data(meuse)")
x = robjects.r("meuse")
y = geo.as_geodata(x,data_col=5,coords_col="1:2")
vario = geo.variog(y)
robjects.r.plot(vario)
但是,您会注意到上面的方法不起作用,因为geoR
似乎没有获得coords.col
或data.col
参数。我不知道为什么会这样,但解决这个问题的一个方法是编写一个包装函数
robjects.r('''
geodata_python <- function(obj) {
return(as.geodata(obj, data.col=5, coords.col=1:2))
}
''')
geodata_wrapper = robjects.globalenv['geodata_python']
y = geodata_wrapper(x)
vario = geo.variog(y)
robjects.r.plot(vario)
robjects.r(“”)
geodata_pythonRpy2是通向python的桥梁,在必要时将python类型映射到R类型。
这里您传递了一个值为“4:5”的参数,即Pythonstr
。该参数将成为一个R字符(R行话中的字符串向量)
当您编写一个R函数调用,例如foo(bar=4:5)
时,您正在编写的是R代码作为参数bar
的值,该代码将被计算以给出实际参数
我想你想要的是:
from rpy2.robjects.vectors import IntVector
y=geo.as_geodata(x, data_col = IntVector((4,5)))
或
很抱歉回复太晚。我不得不转移到其他项目,但又回到了这个项目。我已经根据这些回复让它工作了。干杯!