2013-08-01 37 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