Code driven data.frame naming question.

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Code driven data.frame naming question.

Fieck, Joe
Hello R list.  I'm very new.  I have what I hope is a simple question that I have not been able to find a good solution for.
If this is common and clutters anyone's inbox my most sincere apologies in advance...

I am trying to use an argument from a function in the name of a data.frame.  But I seem to only be able to reference the arguments from the right hand side of the <- .

So something like this.  I would just want the function below to create a new data.frame named "myDataSet".
Done on its own like "myDataSet <- data.frame()"

myFunction <- function(x){       # suppose x is just a collection with one value with is the name I want the data.frame create as.. c("myDataSet") for example
        name(x) <- data.frame()
}

But this of course doesn't work because I have not figured out how to reference the function argument from the left hand side of the <- .  
I have read about the "assign" function but from what I can tell (granted I'm new to R) the assign function works on the variable names not data.frame names which is what I need.

Ultimately what I'm trying accomplish to send a list of character strings then iterate it and create multiple new data.frames each having the name of one of the elements of the list passed to the function.

If there is even a better article out on the web that I'm obviously missing please orient me.   I have struck out so far but I know I may not be searching correctly either.
Any help at all would be much appreciated...
______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Code driven data.frame naming question.

Jeff Newmiller
While the assign function is in fact the function you are looking for, I would strongly advise that you cease and desist in this endeavour and instead make a list of data frames rather than littering your global environment with many individual data frames.

If you have a vector of names of files you can use lapply to read them all into a list of data frames. You can then use the filenames as "names" with which to look up the appropriate data. E.g.

dtadir <- "datadir"
myfiles <- list.files( dtadir )
dtalist <- lapply( myfiles, function(fn) {
   read.csv( file.path( dtadir, fn ), stringsAsFactors=FALSE )
  }
names( dtalist ) <- myfiles

str(dtalist$file001.csv)
str(dtalist[[ "file001.csv" ]])
str( dtalist[[ 1 ]] )

If the filenames have unusual characters in them then you may have to use back-tick quotes when using the dollar-sign operator.

On April 15, 2019 8:50:44 AM PDT, "Fieck, Joe" <[hidden email]> wrote:

>Hello R list.  I'm very new.  I have what I hope is a simple question
>that I have not been able to find a good solution for.
>If this is common and clutters anyone's inbox my most sincere apologies
>in advance...
>
>I am trying to use an argument from a function in the name of a
>data.frame.  But I seem to only be able to reference the arguments from
>the right hand side of the <- .
>
>So something like this.  I would just want the function below to create
>a new data.frame named "myDataSet".
>Done on its own like "myDataSet <- data.frame()"
>
>myFunction <- function(x){       # suppose x is just a collection with
>one value with is the name I want the data.frame create as..
>c("myDataSet") for example
> name(x) <- data.frame()
>}
>
>But this of course doesn't work because I have not figured out how to
>reference the function argument from the left hand side of the <- .  
>I have read about the "assign" function but from what I can tell
>(granted I'm new to R) the assign function works on the variable names
>not data.frame names which is what I need.
>
>Ultimately what I'm trying accomplish to send a list of character
>strings then iterate it and create multiple new data.frames each having
>the name of one of the elements of the list passed to the function.
>
>If there is even a better article out on the web that I'm obviously
>missing please orient me.   I have struck out so far but I know I may
>not be searching correctly either.
>Any help at all would be much appreciated...
>______________________________________________
>[hidden email] 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.

--
Sent from my phone. Please excuse my brevity.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Code driven data.frame naming question.

Fieck, Joe
Thanks for the reply Jeff.  I will play around with your code example and see where it takes me.

-----Original Message-----
From: Jeff Newmiller <[hidden email]>
Sent: Monday, April 15, 2019 4:55 PM
To: [hidden email]; Fieck, Joe <[hidden email]>; [hidden email]
Subject: Re: [R] Code driven data.frame naming question.

[External Email]
________________________________

While the assign function is in fact the function you are looking for, I would strongly advise that you cease and desist in this endeavour and instead make a list of data frames rather than littering your global environment with many individual data frames.

If you have a vector of names of files you can use lapply to read them all into a list of data frames. You can then use the filenames as "names" with which to look up the appropriate data. E.g.

dtadir <- "datadir"
myfiles <- list.files( dtadir )
dtalist <- lapply( myfiles, function(fn) {
   read.csv( file.path( dtadir, fn ), stringsAsFactors=FALSE )
  }
names( dtalist ) <- myfiles

str(dtalist$file001.csv)
str(dtalist[[ "file001.csv" ]])
str( dtalist[[ 1 ]] )

If the filenames have unusual characters in them then you may have to use back-tick quotes when using the dollar-sign operator.

On April 15, 2019 8:50:44 AM PDT, "Fieck, Joe" <[hidden email]> wrote:

>Hello R list.  I'm very new.  I have what I hope is a simple question
>that I have not been able to find a good solution for.
>If this is common and clutters anyone's inbox my most sincere apologies
>in advance...
>
>I am trying to use an argument from a function in the name of a
>data.frame.  But I seem to only be able to reference the arguments from
>the right hand side of the <- .
>
>So something like this.  I would just want the function below to create
>a new data.frame named "myDataSet".
>Done on its own like "myDataSet <- data.frame()"
>
>myFunction <- function(x){       # suppose x is just a collection with
>one value with is the name I want the data.frame create as..
>c("myDataSet") for example
>       name(x) <- data.frame()
>}
>
>But this of course doesn't work because I have not figured out how to
>reference the function argument from the left hand side of the <- .
>I have read about the "assign" function but from what I can tell
>(granted I'm new to R) the assign function works on the variable names
>not data.frame names which is what I need.
>
>Ultimately what I'm trying accomplish to send a list of character
>strings then iterate it and create multiple new data.frames each having
>the name of one of the elements of the list passed to the function.
>
>If there is even a better article out on the web that I'm obviously
>missing please orient me.   I have struck out so far but I know I may
>not be searching correctly either.
>Any help at all would be much appreciated...
>______________________________________________
>[hidden email] 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.

--
Sent from my phone. Please excuse my brevity.
______________________________________________
[hidden email] 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.