Example #1
0
SEXP jr_cast(jl_value_t *tt){
    SEXP ans = R_NilValue;
    JL_GC_PUSH1(&tt);
    if (jl_is_nothing(tt) || jl_is_null(tt))
        return ans;

    if (jl_is_array(tt))
    {
        ans = jr_array(tt);
    }
    else if(jl_isa(tt, "Range"))
    {
        ans = jr_range(tt);
    }
    else if(jl_isa(tt, "DataArray"))
    {
        ans = jr_data_array(tt);
    }
    else if(jl_isa(tt, "DataFrame"))
    {
        ans = jr_data_frame(tt);
    }
    else if (jl_is_tuple(tt))
    {
        PROTECT(ans = Rf_allocVector(VECSXP, jl_tuple_len(tt)));
        for (int i = 0; i < jl_tuple_len(tt); i++)
            SET_VECTOR_ELT(ans, i, jr_cast(jl_tupleref(tt, i)));
        UNPROTECT(1);
    }
    else if(jl_isa(tt, "Dict"))
    {
        ans = jr_dict(tt);
    }
    else if(jl_is_function(tt))
    {
        ans = jr_func(tt);
    }
    else
    {
        ans = jr_scalar(tt);
    }
    JL_GC_POP();
    if (ans == R_NilValue)
    {
        jl_error("invaild object");
    }
    return ans;
}
Example #2
0
//Convert Julia Type To R,Real interface
SEXP Julia_R(jl_value_t *Var)
{
  SEXP ans = R_NilValue;
  if (jl_is_nothing(Var) || jl_is_null(Var))
    return ans;

  //Array To Vector
  JL_GC_PUSH1(&Var);
  if (jl_is_array(Var))
  {
    ans = Julia_R_MD(Var);
  }
  else if (jl_is_DataArrayFrame(Var))
  {
    //try to load DataArrays DataFrames package
    if (!LoadDF())
    {
      JL_GC_POP();
      return R_NilValue;
    }
    if (jl_is_NAtype(Var))
      ans = Julia_R_Scalar_NA(Var);
    else if (jl_is_DataFrame(Var))
      ans = Julia_R_MD_NA_DataFrame(Var);
    else if (jl_is_DataArray(Var))
      ans = Julia_R_MD_NA(Var);
    else if (jl_is_PooledDataArray(Var))
      ans = Julia_R_MD_NA_Factor(Var);    
  }
  else if (jl_is_tuple(Var))
  {
      PROTECT(ans = allocVector(VECSXP, jl_tuple_len(Var)));
      for (int i = 0; i < jl_tuple_len(Var); i++)
        SET_ELEMENT(ans, i, Julia_R(jl_tupleref(Var, i)));
      UNPROTECT(1);
  }
  else
    ans = Julia_R_Scalar(Var);
  JL_GC_POP();
  return ans;
}