On Jun 24, 2014, at 9:21 AM, Romain Francois <rom...@r-enthusiasts.com> wrote:
> Hi, > > Can you give us what str on the returned object gives you? > > I think you need : > > SET_OBJECT(and, 1) ; > > at the end. > SET_OBJECT should not be used by user code in normal circumstances, it is set by R automatically as part of the handling of the "class" attribute. Cheers, S > Romain > > Le 24 juin 2014 à 08:57, Yu Gong <armg...@yahoo.com> a écrit : > >> there is my code, expect return value is a data frame but R say it is list: >> >> SEXP Julia_R_MD_NA_DataFrame(jl_value_t* Var) >> { >> SEXP ans,names,rownames; >> char evalcmd[4096]; >> int i; >> const char* dfname="DataFrameName0tmp"; >> jl_set_global(jl_main_module, jl_symbol(dfname), (jl_value_t*)Var); >> //Get Frame cols >> sprintf(evalcmd,"size(%s,2)",dfname); >> jl_value_t* cols=jl_eval_string(evalcmd); >> int collen=jl_unbox_long(cols); >> jl_value_t* eachcolvector; >> //Create VECSXP >> >> //Create SEXP for Each Column and assign >> PROTECT(ans=allocVector(VECSXP,collen)); >> for (i=0;i<collen;i++) >> { >> sprintf(evalcmd,"%s[%d]",dfname,i+1); >> eachcolvector=jl_eval_string(evalcmd); >> SET_VECTOR_ELT(ans,i,Julia_R_MD_NA(eachcolvector)); >> } >> //set names attribute >> sprintf(evalcmd,"names(%s)",dfname); >> jl_value_t* ret=jl_eval_string(evalcmd); >> jl_value_t* onesymbol; >> if (jl_is_array(ret)) >> { >> PROTECT(names=allocVector(STRSXP,collen)); >> for (i=0;i<jl_array_len(ret);i++) >> { >> onesymbol=jl_arrayref((jl_array_t*)ret,i); >> if (jl_is_symbol(onesymbol)) >> SET_STRING_ELT(names,i,mkChar(((jl_sym_t*)onesymbol)->name)); >> } >> setAttrib(ans,R_NamesSymbol,names); >> UNPROTECT(1); >> } >> //set row names >> sprintf(evalcmd,"size(%s,1)",dfname); >> jl_value_t* rows=jl_eval_string(evalcmd); >> int rowlen=jl_unbox_long(rows); >> PROTECT(rownames=allocVector(INTSXP,rowlen)); >> for (i=0;i<rowlen;i++) >> INTEGER(rownames)[i]=i+1; >> setAttrib(ans,R_RowNamesSymbol,rownames); >> UNPROTECT(1); >> //set class as data frame >> setAttrib(ans,R_ClassSymbol,mkString("data.frame")); >> UNPROTECT(1); >> return ans; >> } > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel