Revision: 472
http://rpy.svn.sourceforge.net/rpy/?rev=472&view=rev
Author: lgautier
Date: 2008-03-28 14:00:07 -0700 (Fri, 28 Mar 2008)
Log Message:
-----------
Fix __setitem__ for STRSXP vectors.
Modified Paths:
--------------
branches/rpy_nextgen/rpy/rinterface/rinterface.c
branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py
Modified: branches/rpy_nextgen/rpy/rinterface/rinterface.c
===================================================================
--- branches/rpy_nextgen/rpy/rinterface/rinterface.c 2008-03-28 20:35:53 UTC
(rev 471)
+++ branches/rpy_nextgen/rpy/rinterface/rinterface.c 2008-03-28 21:00:07 UTC
(rev 472)
@@ -790,6 +790,7 @@
return -1;
}
+ SEXP sexp_copy;
i_R = (R_len_t)i;
switch (TYPEOF(*sexp)) {
case REALSXP:
@@ -805,10 +806,12 @@
(COMPLEX_POINTER(*sexp))[i_R] = (COMPLEX_POINTER(*sexp_val))[0];
break;
case STRSXP:
- SET_STRING_ELT(*sexp, i_R, *sexp_val);
+ SET_STRING_ELT(*sexp, i_R, STRING_ELT(*sexp_val, 0));
break;
case VECSXP:
- SET_VECTOR_ELT(*sexp, i_R, *sexp_val);
+ PROTECT(sexp_copy = Rf_duplicate(*sexp_val));
+ SET_VECTOR_ELT(*sexp, i_R, sexp_copy);
+ UNPROTECT(1);
break;
default:
PyErr_Format(PyExc_ValueError, "cannot handle type %d",
Modified: branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py
===================================================================
--- branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py
2008-03-28 20:35:53 UTC (rev 471)
+++ branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py
2008-03-28 21:00:07 UTC (rev 472)
@@ -168,8 +168,10 @@
self.assertTrue(myVec[2][0][0] == "a")
def testAssignItemString(self):
- letters_R = rinterface.globalEnv.get("letters")
- #letters_R[0] = rinterface.SexpVector(["z", ], rinterface.STRSXP)
+ letters_R = rinterface.SexpVector("abcdefghij", rinterface.STRSXP)
+ self.assertRaises(ValueError, letters_R.__setitem__, 0,
rinterface.SexpVector([1, ], rinterface.INTSXP))
+
+ letters_R[0] = rinterface.SexpVector(["z", ], rinterface.STRSXP)
#import pdb; pdb.set_trace()
self.assertTrue(letters_R[0] == "z") #FIXME: segfault when assigning
value
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
rpy-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rpy-list