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 <hpa...@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: hpa...@fhcrc.org > Phone: (206) 667-5791 > Fax: (206) 667-1319 > [[alternative HTML version deleted]]
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel