将R中的命名列表向量转换为Python中的rpy2?

7
以下是相应的 R 代码在 Python 的 Rpy2 中的等价代码是什么?
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中应该如何正确翻译呢?

2个回答

7
如果我理解你的问题正确,你正在寻找一个标记列表(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 中表达这一点? - user248237
TaggedList 的设计理念是提供类似于 R 命名向量的功能:列表中的每个项目都有一个标签(名称)。与 OrderedDict 的区别在于名称不是唯一的。 - lgautier

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接