Converting an RPy2 ListVector to a Python dictionary

前端 未结 7 1211
日久生厌
日久生厌 2020-12-09 16:46

The natural Python equivalent to a named list in R is a dict, but RPy2 gives you a ListVector object.

import rpy2.robjects as robjects

a = robjects.r(\'list         


        
7条回答
  •  旧巷少年郎
    2020-12-09 17:43

    The following is my function for the conversion from an rpy2 ListVector to a python dict, capable of handling nested lists:

    import rpy2.robjects as ro
    from rpy2.robjects import pandas2ri
    
    def r_list_to_py_dict(r_list):
        converted = {}
        for name in r_list.names:
            val = r_list.rx(name)[0]
            if isinstance(val, ro.vectors.DataFrame):
                converted[name] = pandas2ri.ri2py_dataframe(val)
            elif isinstance(val, ro.vectors.ListVector):
                converted[name] = r_list_to_py_dict(val)
            elif isinstance(val, ro.vectors.FloatVector) or isinstance(val, ro.vectors.StrVector):
                if len(val) == 1:
                    converted[name] = val[0]
                else:
                    converted[name] = list(val)
            else: # single value
                converted[name] = val
        return converted
    

提交回复
热议问题