【问题标题】:translating named list vectors from R into rpy2 in Python?在Python中将命名列表向量从R转换为rpy2?
【发布时间】:2023-08-02 00:47:01
【问题描述】:

python中Rpy2中下面R代码的等价物是什么?

Var1 = c("navy", "darkgreen")
names(Var1) = c("Class1", "Class2")
ann_colors = list(Var1 = Var1)

不清楚ann_colors 是什么。在 R 中评估时,它给出:

> ann_colors
$Var1
     Class1      Class2 
     "navy" "darkgreen" 

robject.ListVector吗?我试过了:

robjects.ListVector({"Class1": "navy", "Class2": "green"})

但这并不完全是因为我不确定如何告诉 ListVector 对象该对象的名称是 Var1,即类似于 list(Var1 = Var1)

如何正确地将其翻译为 rpy2?

【问题讨论】:

    标签: python r rpy2


    【解决方案1】:

    如果我理解你的问题,你正在寻找的是一个 TaggedList:

    import rpy2.rlike.container as rlc
    Var1 = rlc.TaggedList(["navy","darkgreen"], tags=('Class1', 'Class2'))
    

    更多详情请见http://rpy.sourceforge.net/rpy2/doc-2.2/html/rlike.html

    【讨论】:

    • 但是ann_colors 在我的示例中添加了有关Var1 的附加信息,即Var1 是海军/绿色、Class1/Class2 信息的持有者。不确定在 TaggedList 中是如何表达的?
    • @user248237dfsf TaggedList 背后的想法是提供类似于 R 命名向量的东西:列表中的每个项目都有一个标签(名称)。与OrderedDict 的区别在于名称不是唯一的。
    【解决方案2】:

    经过数小时的反复试验,我找到了解决方案。我不完全理解为什么类似的变体不起作用,或者为什么这个方案不能与数据帧互换,但我要做的是:

    anno_colors = robj.StrVector(tuple(["navy", "green"]))
    anno_colors.names = ["Class1", "Class2"]
    od = OrderedDict()
    od["Type"] = anno_colors
    result = robj.ListVector(od)
    print str(result)
    

    【讨论】: