Hi ,

I have put incomplete code here . The complete code works , My doubt is ,
what I am doing logical/safe ? Any memory leak going to happen ? is there
any way to create dataframe ?



SEXP formDF() {

SEXP dfm ,head,df , dfint , dfStr,lsnm;
SEXP  valueVector[2];
char *ab[3] = {"aa","vv","gy"};
int sn[3] ={99,89,12};
char *listnames[2] = {"int","string"};
int i,j;

PROTECT(df = allocVector(VECSXP,2));

PROTECT(valueVector[0] = allocVector(REALSXP,3));
PROTECT(valueVector[1] = allocVector(VECSXP,3));
PROTECT(lsnm = allocVector(STRSXP,2));

SET_STRING_ELT(lsnm,0,mkChar("int"));
SET_STRING_ELT(lsnm,1,mkChar("string"));
SEXP rawvec,headr;

for ( i = 0 ; i < 3; i++ ) {
SET_STRING_ELT(valueVector[1],0,mkChar(listNames[i]));
REAL(valueVector[0])[i] = sn[i];
}

SET_VECTOR_ELT(df,1,valueVector[0]);
SET_VECTOR_ELT(df,0,valueVector[1]);
setAttrib(df,R_RowNamesSymbol,lsnm);

PROTECT(dfm=lang3(install("data.frame"),df,ScalarLogical(FALSE)));
SET_TAG(CDDR(dfm), install("stringsAsFactors")) ;
SEXP res = PROTECT(eval(dfm,R_GlobalEnv));

UNPROTECT(7);
return res;

}



On Thu, Jun 26, 2014 at 3:49 PM, Hervé Pagès <hpages@fhcrc.org> wrote:

> Hi,
>
>
> On 06/26/2014 02:32 PM, Sandip Nandi wrote:
>
>> Hi ,
>>
>> For our production package i need to create a dataframein C . So I wrote
>> the following code
>>
>> SEXP dfm ,head,df , dfint , dfStr,lsnm;
>>
>> *SEXP  valueVector[2];*
>>
>>
>> char *ab[3] = {"aa","vv","gy"};
>> int sn[3] ={99,89,12};
>> char *listnames[2] = {"int","string"};
>> int i,j;
>>
>> //=============================
>>
>> PROTECT(df = allocVector(VECSXP,2));
>>
>> *PROTECT(valueVector[0] = allocVector(REALSXP,3));*
>> *PROTECT(valueVector[1] = allocVector(VECSXP,3));*
>>
>>
>>
>> PROTECT(lsnm = allocVector(STRSXP,2));
>>
>> SET_STRING_ELT(lsnm,0,mkChar("int"));
>> SET_STRING_ELT(lsnm,1,mkChar("string"));
>> SEXP rawvec,headr;
>> unsigned char str[24]="abcdef";
>>
>> for ( i = 0 ; i < 3; i++ ) {
>>
>> *SET_STRING_ELT(valueVector[1],i,mkChar(ab[i]));*
>> *REAL(valueVector[0])[i] = sn[i];*
>>
>> }
>>
>>
>> It works , data frame is being created and executed properly .
>>
>
> Really? You mean, you can compile this code right? Otherwise it's
> incomplete: you allocate but do nothing with 'df'. Same with 'lsnm'.
> And you don't UNPROTECT. With no further treatment, 'df' will be an
> unnamed list containing junk data, but not the data.frame you expect.
> So there are a few gaps that would need to be filled before this code
> actually works as intended.
>
> Maybe try and come back again with specific questions?
>
> Cheers,
> H.
>
>  > Just curious , if I am doing anything wrong or is there another way
> around
>
>> for creation of data-frame .  I am concerned about the SEXP 2D array .
>>
>> Thanks,
>> Sandip
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
> --
> Hervé Pagès
>
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M1-B514
> P.O. Box 19024
> Seattle, WA 98109-1024
>
> E-mail: hpages@fhcrc.org
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
>

	[[alternative HTML version deleted]]

