在rpy2中将元素(向量)添加到列表中
在R语言中,我可以很简单地往一个列表里添加元素:
mylist = list()
mylist[[1]] = c(1,2)
mylist[[2]] = c(2,3)
mylist[[length(mylist)+1]] = c(3,4)
那么在rpy2中我该怎么做呢?我现在使用的是rpy2 2.1.9。我试过以下方法,但没有成功。
import rpy2.robjects as robjects
a = robjects.r('list()')
b = robjects.IntVector([1,2])
a[0] = b
IndexError: Index out of range.
a[1] = b
IndexError: Index out of range.
aa = a.__add__(b) # But this makes a list out of the vector
aa.r_repr()
'list(1L, 2L)'
# We wanted something like the following instead:
aaa = robjects.r('list(c(1,2))')
aaa.r_repr()
'list(c(1, 2))'
2 个回答
1
我不太确定你能否在当前版本的rpy2中做到这一点,但你可以试试rpy2.rlike.container.TaggedList这个类。它可以像R语言中的列表一样使用,并且支持添加、删除和重新标记项目。根据我的观察,列表和向量的赋值操作可能存在一个bug。
5
如果你想使用R语言中的“[[<-”这个操作符,你需要调用一个叫做rx2()的方法(具体可以参考[用R的方式赋值][1])。
在rpy2-2.2.0dev版本中,你可以这样做:a.rx2[1] = b
。
[1]: http://rpy.sourceforge.net/rpy2/doc-2.2/html/vector.html#assigning-r-style 用R的方式赋值