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

Reply via email to