如何更改RS4类属性的默认值-rpy2

问题描述

我通过执行以下操作在python中映射RS4类:

from rpy2.robjects.packages import importr
import rpy2.robjects as ro

class MapTOS4(ro.methods.RS4):
    """
    writing a child class to map to S4 reference class in python
    """
    def LoadFile(self,filename):
        """access the LoadFile method of SlicedData class"""

        return ro.baseenv['$'](self,'LoadFile')(filename)
    
    def fileSliceSize(self):
        """access the class attribute or field""" 
        return ro.baseenv['$'](self,'fileSliceSize')
    
mql = importr('MatrixEQTL')
data = MapTOS4(mql.SlicedData())
print(data.fileSliceSize())

执行上述代码时,我得到了以下[1] 1000,这是因为在该特定程序包中,类字段/属性fileSliceSize的默认值设置为1000。但是,我试图将该类属性的值重置或更改为2000。

在R中,您可以使用以下简单的代码轻松做到这一点:

data$fileSliceSize = 2000 

如何基于我在Python中的实现来实现这一目标?

非常感谢您。

解决方法

在R中,data$fileSliceSize = 2000操作只是一个语法糖,用于调用带有三个参数( object key , value ):

$<-

library(MatrixEQTL) data = SlicedData() `$<-`(data,'fileSliceSize',2000) # SlicedData object. For more information type: ?SlicedData # Number of columns: 0 # Number of rows: 0 # Data is stored in 0 slices 访问相同的方式是以下语法糖:

data$fileSliceSize

该技巧用于转义函数名称中的特殊字符-您可以使用反引号调用任何R函数:

`$`(data,'fileSliceSize')
# [1] 2000

请参阅R文档的Extract chapter

因此,在rpy2中,您可以简单地执行以下操作:

`print`('text')
# [1] "text"

但是,我建议您尝试一种更“ pythonic”的方法(为简洁起见,省略了文档字符串):

ro.baseenv['$<-'](data,2000)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...