[R] Write a function that allows access to columns of a passed dataframe.

Bert Gunter bgunter.4567 at gmail.com
Mon Dec 5 22:34:28 CET 2016


Inline.

-- Bert


Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Mon, Dec 5, 2016 at 9:53 AM, Rui Barradas <ruipbarradas at sapo.pt> wrote:
> Hello,
>
> Inline.
>
> Em 05-12-2016 17:09, David Winsemius escreveu:
>>
>>
>>> On Dec 5, 2016, at 7:29 AM, John Sorkin <jsorkin at 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 at 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.



More information about the R-help mailing list