From simon.urbanek at r-project.org  Fri Oct  2 02:15:19 2009
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Thu, 1 Oct 2009 20:15:19 -0400
Subject: [Rd] Value of SET_STRING_ELT() must be a 'CHARSXP' not a
	'character' & 'getEncChar' must be called on a CHARSXP
In-Reply-To: <1e7471d50910011526m6820c63ic89227948fb3def0@mail.gmail.com>
References: <A1976D4B-18D1-462B-B11C-AC957201EC73@gmail.com>
	<D50DD870-D7D8-4040-896A-806C4BE7F8A9@r-project.org>
	<1e7471d50910011526m6820c63ic89227948fb3def0@mail.gmail.com>
Message-ID: <0E32F484-DBFC-426F-BC3A-BC11910C3EEF@r-project.org>


On Oct 1, 2009, at 6:26 PM, Saptarshi Guha wrote:

> Hello
> I could send a .Rdata file but it doesn't load throwing a similar  
> error.

That is a strong indicator that you're creating some invalid R objects  
in your C code, so the problem is likely there, not in R ... The code  
below is way incomplete, you can have the bug pretty much anywhere out  
of sight so there is not much we can help you with...

Cheers,
Simon


> I can go through the code (below)
>
> Now if instead of A0-A3 and B0-B3, i simply create a RAWSEXP and  
> copy the the
> raw bytes (in kvhold) return this list of two-element lists  
> containing raw bytes
> and then call
> lapply(h, function(r) list(rhuz(r[[1]],r[[2]]))) #where h is what is
> returned from the code below
> where rhuz is a wrapper around the functions called in A0-A3, it works
>
> So i'm quite confused here.
> Thank you for your time
> (R-2.9.1)
> Regards
> Saptarshi
> //using NewList and GrowList from R sources
> SEXP rv;
> PROTECT( rv = NewList());
> while(true){
> // read an integer kvlength
> // then read kvlength bytes into kvhold
> // (from a file)
>
>  // The KEY
>  PROTECT(l = Rf_allocVector(VECSXP,2));
>  REXP *rexp1 = new REXP(); //A0
>  rexp1->ParseFromArray( kvhold, kvlength ); //A1
>  PROTECT(k = message2rexp(*rexp1)); //A2
>  delete(rexp1); //A3
>  SET_VECTOR_ELT( l, 0, k);
>
>
> // read an integer kvlength
> // then read kvlength bytes into kvhold
> // (from a file)
>
>  // The VALUE
>  REXP *rexp2 = new REXP(); //B0
>  rexp2->ParseFromArray( kvhold, kvlength );//B1
>  PROTECT(k = message2rexp(*rexp2));//B2
>  delete(rexp2); //B3
>  SET_VECTOR_ELT( l, 1, k);
> 	
>  //Rf_PrintValue successfully prints both k for all k
>  UNPROTECT(3); // the two k's and l
>  rv = GrowList(rv, l);
>  //We break when kvlength==-1
> }
>
> //now return a list containing the objects
> //similar to code in R src/main
> rv = CDR(rv);
> SEXP rval;
> PROTECT(rval = Rf_allocVector(VECSXP, Rf_length(rv)));
> for (int n = 0 ; n < LENGTH(rval) ; n++, rv = CDR(rv)){
>  SET_VECTOR_ELT(rval, n, CAR(rv));
> }
> UNPROTECT(2); //rval and rv
> return(rval)
>
> On Thu, Oct 1, 2009 at 5:36 PM, Simon Urbanek
> <simon.urbanek at r-project.org> wrote:
>> Saptarshi,
>>
>> how did you create those lists? Can you send us the code? If not,  
>> can you
>> put up the .RData file? Without a reproducible example this is hard  
>> to debug
>> ...
>>
>> Thanks,
>> Simon
>>
>>
>> On Oct 1, 2009, at 14:26 , Saptarshi Guha wrote:
>>
>>> Hello,
>>> I have list of 600K lists, each sublist a list of two elements,  
>>> the first
>>> a character, the second a list of six named elements, some  
>>> characters some
>>> numrics.
>>> LISTA (600K) (:= h)
>>>  |__ List of two elements
>>>       |__ Character
>>>       |__ Named List of 6 elements (characters and numerics)
>>>
>>> This works,
>>> sip <- lapply(h,function(r) r[[2]][['sip']])
>>>
>>> but  I wish to unlist this
>>>
>>> sip <- unlist(lapply(h,function(r) r[[2]][['sip']]))
>>>
>>> and get the following error:
>>> Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'list'
>>> Debugging to find which:
>>>
>>> i<-1
>>> sip <- unlist(lapply(h,function(r) {
>>>        i<<-i+1 #debug messages
>>>        cat(i,"------------------>","\n"); print( r[[2]] ) #debug  
>>> message
>>>        r[[2]][['sip']]
>>> }))
>>>
>>> [1]Error in print.default(r[[2]]) : 'getEncChar' must be called on a
>>> CHARSXP
>>>
>>>
>>> Which occurs on the 122,204'th item. All entries r[[2]] are  
>>> similar so I
>>> don't know why this happening?
>>> The strangest thing is that this error never happened a few days  
>>> ago and
>>> the same  code causes this to occur today.
>>>
>>>
>>> Any ideas would be helpful.
>>> Regards
>>> Saptarshi
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>
>>
>>
>
>



[Rd] Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'character' & 'getEncChar' must be called on a CHARSXP
Simon Urbanek