spsurvey::grts需要使用无命名列表的rpy2实现

2024-05-15 08:11:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有单个地层的形状文件,我正在对其应用a-survey::grts方法。这在R中工作得很好,但在rpy2中有一个“无”命名列表却让我大吃一惊

dsgn <- list(None=list(panel=c(Base=50), seltype="Equal"))

grts(design=dsgn,
     DesignID='newpts',
     type.frame='finite',
     src.frame='shapefile',
     in.shape=interest,
     att.frame=att,
     shapefile=TRUE,
     out.shape="newtest",
     prj=file.name)

需要注意的是None-named列表,它是一个design requirement,有1个层。当我把它放到rpy2中时,问题就出现了,因为python就是python

dsgn = robjects.r.list(None=robjects.r.listlist(panel=c(Base=50), seltype="Equal"))

这给了我一个语法错误:关键字不能是表达式。我理解python为什么告诉我这一点,但我在rpy2文档中找不到解决方法是什么,也找不到其他人遇到过同样挑战的地方。我尝试了各种形式的r.None、Null等,并且完全不使用None层(这会导致仅使用1层所导致的错误)。为单一地层条件创建解决方案或在rpy2中具有未命名列表的解决方案将非常受欢迎


Tags: 方法none列表baseequalframelistdesign
1条回答
网友
1楼 · 发布于 2024-05-15 08:11:24

None在Python中确实是一个保留字,但是很少有办法解决这个问题

在下面的示例中,R函数c是:

c = robjects.r.c

1-在Python中解决这个问题的一般方法是使用dict

dsgn = robjects.r.list(**{'None': robjects.r.listlist(panel=c(Base=50),
                                                      seltype="Equal")})

https://rpy2.github.io/doc/v3.2.x/html/robjects_functions.html#callable

2-方法rcall

dsgn = robjects.r.list.rcall(
    ('None', robjects.r.listlist(panel=c(Base=50), seltype="Equal"))),
    globalenv
)

https://rpy2.github.io/doc/v3.2.x/html/robjects_functions.html#rcall

3-包装功能

make_dsgn = robjects.r('function(...) {list(None=list(...))}')
dsgn = make_dsgn(panel=c(Base=50, seltype='Equal'))

相关问题 更多 >