This an alternating way of doing it using a list if you know the argument names in the function definition i.e. ?formals and ?alist, But would change the default values of the function. Probably not you wanted.
> f <- function(x,y,z) x+y+z > args<-alist(x=5,y=6,z=7) > formals(f) <- args > f() [1] 18 On 26 January 2013 01:46, Carlos Pita <carlosjosep...@gmail.com> wrote: > Thanks Bert, do.call is exactly what I was looking for. What in lisp > is apply and in python f(*v). > >> Your whole premise that the arguments of a function should be mappable to >> elements of a vector seems contrary to good R programming practice. > > Jeff I didn't pretend to imply that the mapping should by always > possible. lists for positional arguments and named lists for named > arguments would do the trick most of the times. It's pretty common in > dynamic languages. > > That said, the specific task I have in mind is to index an array of an > arbitrary dimension n by a list of length n vectors, each one > representing <x1,...,xn> coordinates. > > For example, if n=2, the array is the matrix m, and the list of vectors is vs: > > m=matrix(1:16,4) > vs = list(c(2,3),c(2,2),c(1,1)) > > Then do.call would allow me to index m as follows: > > lapply(vs, function(v) { do.call(`[`, append(list(m), v)) }) > > Alternatively: > > f = function (...) { m[...] } > lapply(vs, function(v) { do.call(f, as.list(v)) }) > > Of course, I could just do m[v[1],v[2]] in this case, but the point is > that the dimension n would be a parameter of my function, not a > constant. > > But if you know of a better or more r-esque solution I would be very > glad to hear of it. > > Best regards > -- > Carlos > > > Best regards > -- > Carlos > > Consider changing the called function's handling of arguments instead > to accept the vector of data directly if a vector makes sense, or to a > list if the arguments have a variety of types. >> --------------------------------------------------------------------------- >> Jeff Newmiller The ..... ..... Go Live... >> DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... >> Live: OO#.. Dead: OO#.. Playing >> Research Engineer (Solar/Batteries O.O#. #.O#. with >> /Software/Embedded Controllers) .OO#. .OO#. rocks...1k >> --------------------------------------------------------------------------- >> Sent from my phone. Please excuse my brevity. >> >> Carlos Pita <carlosjosep...@gmail.com> wrote: >> >>>Hi, >>> >>>I want to know if it's possible to pass a vector v=c(x,y,...) to a >>>function f(x,y,...) so that each vector element corresponds to a >>>formal argument of the function. For python programmers: f(*v). >>> >>>Specifically, what I'm trying to achieve is: given a list of >>>coordinates l=list(c(x1,y1,z1), c(x2,y2,z2),...) I would like to >>>obtain the corresponding elements in some array A (3-dim in this >>>case). That is: A[x1,y1,z1], A[x2,y2,z2],.... >>> >>>One way would be to transform l=list(c(x1,y1,z1), c(x2,y2,z2),...) to >>>l2=list(c(x1,x2,...),c(y1,y2,...),c(z1,z2,...)) and then (if this is >>>possible at all) execute the equivalent to A[*l2]. >>> >>>Another way would be to lapply function(xyz) { A[*xyz] } to each >>>coordinate vector in l. In any case I need the f(*v) equivalent. >>> >>>Please take into account that, despite the 3-dim example, I need to >>>implement the above to accept n-dim vectors for arbitrary n, so >>>something like x<-xyz[1], y<-xyz[2], z<-xyz[3] wouldn't fit the bill. >>> >>>Any other suggested solution would be appreciated. >>> >>>Best regards >>>-- >>>Carlos >>> >>>______________________________________________ >>>R-help@r-project.org mailing list >>>https://stat.ethz.ch/mailman/listinfo/r-help >>>PLEASE do read the posting guide >>>http://www.R-project.org/posting-guide.html >>>and provide commented, minimal, self-contained, reproducible code. >> > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.