void td_r_invoke1(td_val_t *out, char *fname, td_val_t *arg) { SEXP ans; string arg_name = r_env.parseEval("paste(sample(letters, 10, replace=TRUE), collapse='')"); r_env[arg_name] = from_td_val(arg); r_env.parseEval( (string(fname) + "(" + arg_name + ")").c_str(), ans); r_env.parseEvalQ(string("rm(") + arg_name + ")"); R_PreserveObject(ans); to_td_val(out, ans); }
void td_r_invokeGraph2(graph_t *out, char *fname, graph_t *arg, int k) { char str[255]; derived_graph_and_annotation_t ret; SEXP ans; r_env["m"] = graph_to_dgRMatrix(*arg); r_env["k"] = k; sprintf(str, "%s(m, k)", fname); r_env.parseEval(str, ans); r_env.parseEvalQ("rm(\"m\", \"k\")"); List l(ans); ret.graph = SEXP_to_graph2(l["graph"], *out); ret.cluster_assignments = copy_to_c_type<IntegerVector>(l["clusters"]); }