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

Rui Barradas ruipbarradas at sapo.pt
Mon Dec 5 18:53:35 CET 2016


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



More information about the R-help mailing list