2013-08-01 91 views
4

python中Rpy2中以下R代码的等效代码是什么?在Python中将命名列表向量从R翻译为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?

回答

1

经过数小时的反复试验,我找到了解决方案。我不完全理解为什么这个类似的变种没有工作,或者为什么这个方案是不是dataframes互换,但我得工作:

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) 
3

如果我理解正确你的问题,你在找什么是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

+0

但是'ann_colors'在我的例子中增加了额外的信息关于'Var1',即'Var1'是海军/绿色,Class1/Class2信息的持有者。不知道如何在TaggedList中表达? – user248237dfsf

+0

@ user248237dfsf“TaggedList”背后的想法是提供类似于R命名向量的东西:列表中的每个项目都有一个标签(名称)。与OrderedDict的区别在于名称不是唯一的。 – lgautier