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; } [[alternative HTML version deleted]]
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel