> On Dec 5, 2016, at 9:53 AM, Rui Barradas <ruipbarra...@sapo.pt> wrote: > > Hello, > > Inline. > > Em 05-12-2016 17:09, David Winsemius escreveu: >> >>> On Dec 5, 2016, at 7:29 AM, John Sorkin <jsor...@grecc.umaryland.edu> wrote: >>> >>> Rui, >>> I appreciate your suggestion, but eliminating the deparse statement does >>> not solve my problem. Do you have any other suggestions? See code below. >>> Thank you, >>> John >>> >>> >>> mydf <- >>> data.frame(id=c(1,2,3,4,5),sex=c("M","M","M","F","F"),age=c(20,34,43,32,21)) >>> mydf >>> class(mydf) >>> >>> >>> myfun <- function(frame,var){ >>> call <- match.call() >>> print(call) >>> >>> >>> indx <- match(c("frame","var"),names(call),nomatch=0) >>> print(indx) >>> if(indx[1]==0) stop("Function called without sufficient arguments!") >>> >>> >>> cat("I can get the name of the dataframe as a text string!\n") >>> #xx <- deparse(substitute(frame)) >>> print(xx) >>> >>> >>> cat("I can get the name of the column as a text string!\n") >>> #yy <- deparse(substitute(var)) >>> print(yy) >>> >>> >>> # This does not work. >>> print(frame[,var]) >>> >>> >>> # This does not work. >>> print(frame[,"var"]) >>> >>> >>> >>> >>> # This does not work. >>> col <- xx[,"yy"] >>> >>> >>> # Nor does this work. >>> col <- xx[,yy] >>> print(col) >>> } >>> >>> >>> myfun(mydf,age) >> >> >> When you use that calling syntax, the system will supply the values of >> whatever the `age` variable contains. (And if there is no `age`-named >> object, you get an error at the time of the call to `myfun`. > > Actually, no, which was very surprising to me but John's code worked (not the > function, the call). And with the change I've proposed, it worked flawlessly. > No errors. Why I don't know.
I see. Must be one of those "promise" things. It appears that if you don't actually require the value you can just pass a name with no value? Thanks for the correction. -- David. > > Rui Barradas > > You need either to call it as: >> >> myfun( mydf , "age") >> >> >> # Or: >> >> age <- "age" >> myfun( mydf, age) >> >> Unless your value of the `age`-named variable was "age" in the calling >> environment (and you did not give us that value in either of your postings), >> you would fail. >> David Winsemius Alameda, CA, USA ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.