[R] Passing a Data Frame Name as a Variable in a Function
alanyong at caltech.edu
Thu Jan 29 18:43:24 CET 2015
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!
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
More information about the R-help