Source code for rpy2.rlike.functional
import itertools
[docs]def tapply(seq, tag, fun):
""" Apply the function `fun` to the items in `seq`,
grouped by the tags defined in `tag`.
:param seq: sequence
:param tag: any sequence of tags
:param fun: function
:rtype: list
"""
if len(seq) != len(tag):
raise ValueError("seq and tag should have the same length.")
tag_grp = {}
for i, t in enumerate(tag):
try:
tag_grp[t].append(i)
except LookupError as le:
tag_grp[t] = [i, ]
res = [(tag, fun([seq[i] for i in ti])) for tag, ti in tag_grp.items()]
return res
def listify(fun):
""" Decorator to make a function apply
to each item in a sequence, and return a list. """
def f(seq):
res = [fun(x) for x in seq]
return res
return f
def iterify(fun):
""" Decorator to make a function apply
to each item in a sequence, and return an iterator. """
def f(seq):
for x in seq:
yield fun(x)
return f