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

Hadley Wickham h.wickham at gmail.com
Thu Jan 29 21:36:22 CET 2015


On Thu, Jan 29, 2015 at 11:43 AM, Alan Yong <alanyong at caltech.edu> wrote:
> 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.

If you have to go down this route, at least do nrow(get(DFName))

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

I'd highly recommend learning a little functional programming such as
the use of lapply (e.g. http://adv-r.had.co.nz/Functionals.html).
Then you can easily do:

csvs <- dir(pattern = "\\.csv$")
all <- lapply(csvs, read.csv)
one <- do.call("rbind", all)

to find all the csv files in a directory, load into a list and then
collapse into a single data frame.

You're much better off learning how to do this than futzing around
with named objects in the global environment.

Hadley

-- 
http://had.co.nz/



More information about the R-help mailing list