An object of type
Robj supports (partially at the moment, slices
are not supported yet) the sequence protocol. You can retrieve or set
the n-th item of a
Robj object, and you can take its length with
the usual Python function
Every R object is a vector, so this protocol can be applied to any
Robj object; although it can raise an exception when an index
is out of bounds. Note that in this case, the exception is
IndexError instead of
RException; this is done to allow
for loop to iterate over a
The return values of the sequence functions are converted to Python according to the default mode. If the default mode is set to `NO_DEFAULT', the sequence functions use the `PROC_MODE' conversion mode.
>>> r.seq.local_mode(NO_CONVERSION) >>> a = r.seq(3, 5) >>> a 3 >>> a 5 >>> a[-1] 5 >>> a Traceback (most recent call last): File "<stdin>", line 1, in ? IndexError: R object index out of range >>> >>> for i in a: ... print i ... 3 4 5
The behavior of the setting of items is different from that of Python, mainly, when you try to set an item out of bounds. Remember, in these cases, that the setting is done via R functions, which have different semantic from the Python sequence functions.
(following the previous example) >>> b = r.seq(1, 3) >>> dummy = r.print_(b)  1 2 3 >>> b = -1 >>> dummy = r.print_(b)  -1 2 3 >>> b = 4 >>> dummy = r.print_(b)  -1 2 3 NA NA NA 4
Also, be careful with the different index convention between Python and R: in Python, indices start at 0; in R, they start at 1.
(following the previous example) >>> a 3 >>> r['['](a, 1) 3
len can also be applied to any
(following the previous example) >>> len(a) 3 >>> len(r.seq) 1 >>> len(r.pi) 1