/// <summary> /// Executes the function. Match the function arguments by name. /// </summary> /// <param name="argNames">The names of the arguments. These can be empty strings for unnamed function arguments</param> /// <param name="args">The arguments passed to the function</param> /// <returns></returns> protected SymbolicExpression InvokeViaPairlist(string[] argNames, SymbolicExpression[] args) { var names = new CharacterVector(Engine, argNames); var arguments = new GenericVector(Engine, args); arguments.SetNames(names); var argPairList = arguments.ToPairlist(); //IntPtr newEnvironment = Engine.GetFunction<Rf_allocSExp>()(SymbolicExpressionType.Environment); //IntPtr result = Engine.GetFunction<Rf_applyClosure>()(Body.DangerousGetHandle(), handle, // argPairList.DangerousGetHandle(), // Environment.DangerousGetHandle(), newEnvironment); return(createCallAndEvaluate(argPairList.DangerousGetHandle())); }
public void TestListSetNames() { // http://stackoverflow.com/questions/33326594/how-can-i-create-named-list-members-object-in-r-net var engine = this.Engine; var list = new GenericVector(engine, 2); // odpar <- list(mean = c(-1.5, 0, 1.5), var = c(0.5, 0.6, 0.8)) list[0] = engine.CreateNumericVector(new[] { -1.5, 0, 1.5 }); list[1] = engine.CreateNumericVector(new[] { 0.5, 0.6, 0.8 }); list.SetNames("mean", "var"); engine.SetSymbol("TestListSetNames", list); var listNames = engine.Evaluate("names(TestListSetNames)").AsCharacter().ToArray(); Assert.AreEqual("mean", listNames[0]); Assert.AreEqual("var", listNames[1]); }