Comments (6)
Original comment by Anonymous.
Possible fix by editing rpy2py_basic code to read as follows:
#!python
def rpy2py_basic(obj):
if hasattr(obj, '__len__'):
if obj.typeof in [ri.INTSXP, ri.REALSXP, ri.CPLXSXP,
ri.LGLSXP, ri.STRSXP]:
res = [x for x in obj]
elif obj.typeof in [ri.VECSXP]:
if r.names(obj) != []:
res = dict([(r.names(obj)[i], rpy2py(obj[i])) for i in range(len(obj))])
else:
res = [rpy2py(x) for x in obj]
elif obj.typeof in [ri.LANGSXP]:
res = Robj(obj)
else:
raise ValueError("Invalid type %i (%s) for 'obj'." %(obj.typeof, ri.str_typeint(obj.typeof)))
else:
res = Robj(obj)
return res
from rpy2.
Original comment by Laurent Gautier (Bitbucket: lgautier, GitHub: lgautier).
In R, names are not contrained to be unique (whether we like it or not).
Converting they to dict the way it is proposed can lead to very sneaky problems (as duplicated names will just vanish), and I am seriously considering to break compatibility with rpy here.
This is probably worth being brought to the list for discussion. Should conversion to a dict:
a- make lists of elements associated with each key / name ?
b- fail whenever names are duplicated ?
c- be to an ordered dictionnary (so the order is preserved) ?
(I am currently leaning for c)
from rpy2.
Original comment by Anonymous.
I agree that 'c' is probably the best option. I'm not how rpy overcame the problem (if at all), but it's probably worth looking into further.
from rpy2.
Original comment by Laurent Gautier (Bitbucket: lgautier, GitHub: lgautier).
Option c/ is still holding details to be ironed out.
When a value is queried on its position that's easy, but what will be returned when a value is queried on its key and the key is present at several locations ? If this is a list, then it would be homogeneous to have a list returned in all cases (list of length one if the key is present only once).
PS: AFAIR, rpy will silently override duplicates (to only keep the last one).
from rpy2.
Original comment by Laurent Gautier (Bitbucket: lgautier, GitHub: lgautier).
No reaction on the mailing-list regarding the which way to go.
I made the conversion from R list to Python dict happening under the following two conditions:
The list has names (if not, no conversion is performed)
The list names are unique (if no an exception ValueError is raised).
It committed in:
<<changeset 948:8fdd1ee9ccef>>
from rpy2.
Original comment by Laurent Gautier (Bitbucket: lgautier, GitHub: lgautier).
Removing version: 2.1.0 (automated comment)
from rpy2.
Related Issues (20)
- Support `.rx[row, col]` indexing for matrices and data frames HOT 1
- Allow assigning to rownames, colnames and dimnames for sparse matrices HOT 3
- Installation regression from 3.5.12 to 3.5.13 in Rocky 8 Linux with R 4.3.1 HOT 4
- cannot load library
- problem installing on mac HOT 5
- rpy2 tests fail with Python 3.13 (in alpha now) HOT 2
- Issues Integrating Library Functions with Python via rpy2 HOT 2
- rpy2 cannot properly call the DataFrame object within the S4Vectors package. HOT 2
- Issue converting R data frame to Pandas data frame HOT 1
- rpy2 cannot resolve the correct on Mac M1 HOT 1
- BoolVector to array conversion behaves unexpectedly HOT 3
- Installation on linux platform HOT 1
- NotImplementedError: Conversion rules for `rpy2.robjects` appear to be missing. Those rules are in a Python contextvars.ContextVar. This could be caused by multithreading code not passing context to the thread. HOT 2
- Not an rpy2 R object and unable to map it to one: 'value' HOT 2
- PEP 517 builds rpy2 fails to install on Windows HOT 2
- Error in Colab, rmagic and pandas 2.x HOT 2
- can't install rpy2 3.5.16 on Ubuntu 22.04.3 LTS HOT 16
- Unable to install rpy2 in centos7/rhel7 with R4.4.0 HOT 1
- vector complex test failed on riscv64 HOT 5
- Cannot import packages HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rpy2.