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.

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.


______________________________________________
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.

Reply via email to