diff --git a/src/rinterface_extra.c b/src/rinterface_extra.c index be3af70742..6bf1148422 100644 --- a/src/rinterface_extra.c +++ b/src/rinterface_extra.c @@ -8657,7 +8657,16 @@ SEXP R_igraph_add_env(SEXP graph) { SET_CLASS(result, Rf_duplicate(GET_CLASS(graph))); } - SET_VECTOR_ELT(result, igraph_t_idx_env, Rf_allocSExp(ENVSXP)); + // Get the base namespace + SEXP base_ns = PROTECT(R_FindNamespace(Rf_mkString("base"))); px++; + // Get the emptyenv function + SEXP empty_env_fun = PROTECT(Rf_findVarInFrame(base_ns, Rf_install("emptyenv"))); px++; + // Call emptyenv() + SEXP empty_env = PROTECT(Rf_eval(Rf_lang1(empty_env_fun), R_GlobalEnv)); px++; + // Evaluate the call + SEXP env = PROTECT(R_NewEnv(empty_env, 0, 0)); px++; + + SET_VECTOR_ELT(result, igraph_t_idx_env, env); uuid_generate(my_id); uuid_unparse_lower(my_id, my_id_chr);