[R] Passing a Data Frame Name as a Variable in a Function

Alan Yong
Thu, 29 Jan 2015 17:43:24 -0000

Much thanks to everyone for their recommendations!  I agree that fishing in the
global environment isn't ideal & only shows my budding understanding of
R.

For now, I will adapt Chel Hee's
"length(eval(parse(text=DFName))[,1])" solution then fully explore
Jeff's suggestion to put the data frames into a list.

At best, I am implementing an ineloquent approach to:

(1) Add a column to each data frame with a string that is parsed from the
appendage of the data frame name, i.e., string is "1001" from data
frame object of "df.1001"; then,
(2) Bind the rows of all the files.

Any more feedback will be much appreciated!

Cheers,
Alan

On Jan 29, 2015, at 3:11 AM, peter dalgaard wrote:

>
> On 29 Jan 2015, at 07:34 , Jeff Newmiller <jdnewmil at
dcn.davis.ca.us> wrote:
>
>> This approach is fraught with dangers.
>>
>> I recommend that you put all of those data frames into a list and have
your function accept the list and the name and use the list indexing operator
mylist[[DFName]] to refer to it. Having functions that go fishing around in the
global environment will be hard to maintain at best, and buggy at worst.
>
> Agreed. However, just to help understand the issue:
>
> DFName is a length-one vector of character strings, not the object that has
the name contained in the string. I.e. you can do nchar(DFName) and presumably
get the value 7, but there is no operation on df.1001 that can tell you the
length of its name. You can (but shouldn't, as per Jeff's note) get from
name to object using get()/assign() and also via some concoctions involving
combinations of eval(), parse(), as.name(), and substitute().
>
> --
> Peter Dalgaard, Professor,
> Center for Statistics, Copenhagen Business School
> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
> Phone: (+45)38153501
> Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
>
>
>
>
>
>
>
>