finds.utils.pyR
Wrapper class over rpy2 package to interface with R environment
Deconstruct and expose an rpy2 or numpy/pandas object interchangeably.
- rpy2 
Copyright 2022, Terence Lim
MIT License
- class finds.utils.pyR.PyR(item: Any, names: StrVector | ListVector | str | List[str] | None = None, verbose: int = 0)[source]
- Bases: - object- Store and expose as rpy2 or numpy/pandas objects - Parameters:
- item – input R object, or numpy array, or pandas DataFrame or Series 
- names – named labels of object items 
 
- Variables:
- iloc – - dict or numpy array - internally, objects are stored as either numpy array, or dict of objects (when input was R ListVector or DataFrame, or Python dict). 
- TODO: should use other safer property getters to view object in target types: e,g, .frame (pandas), .ro (RObject), or .values (python dict or ndarray) 
 
- dim (tuple of int) – dimensions of data objects 
- colnames (names, rownames,) – named labels of object items 
 
 - Notes: - input item can be of either Python or R object type 
- input labels in each dimension can be explicitly provided, and should have same dim as object, as error checking is minimal 
- In R, matrices are column-major ordered (aka Fortran-like index order, with the first index changing fastest) although the R constructor matrix() accepts a boolean argument byrow that, when true, will build the matrix as if row-major ordered (aka C-like, which is also Python numpy default order, where the last axis index changes fastest) 
- A suggested convention is to append ‘_’ to R function names and ‘_r’ to R objects, and capitalize initial letter of PyR instances. 
- r[‘plot’] may need to explicitliy set xlab=’’, ylab=’’ 
- TODO: if hasattri(‘slots’), esp ‘ts’ class, e.g. nile.slots.items() 
 - Examples: - >>> from rpy2.robjects import r >>> from rpy2.robjects.packages import importr >>> amen_r = importr('amen') # use R library >>> c_ = r['c'] # link R routines >>> Nodevars = PyR(r['IR90s'].rx2['nodevars']) # retrieve R data >>> Gdp = Nodevars[:, 'gdp'] # getitem subset with slice >>> topgdp = Gdp.values > sorted(Gdp.py, reverse=True)[30] # python calcs >>> Dyadvars = PyR(r['IR90s'].rx2['dyadvars']) >>> Y = Dyadvars[topgdp, topgdp, 'exports'] # getitem with boolean index >>> Y.iloc = np.log(Y.iloc + 1) # update with python calculations - index(s: str | List[str], axis: int = -1)[source]
- Helper method to lookup index/es of (list of) str label in names 
 - static savefig(filename, display=True, ax=None, figsize=(12, 12))[source]
- Save R graphics to file, or return R command, optionally imshow 
 - property frame
- Expose a view as pandas DataFrame 
 - property ncol
- Length of second dimension, as R IntVector type 
 - property nrow
- Length of first dimension, as R IntVector type 
 - property ro
- Expose a view as RObject, so that can pass to R environment 
 - property values
- Expose view as python dict (when ListVector) or ndarray (when not)