reading in a (very simple) list from a file

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

reading in a (very simple) list from a file

VA Smith
Apologies - I feel this is a very simple thing to do yet I am failing massively. I keep finding information about how to do much more complicated things (usually on this mailing list!), which then fail when I try to apply it to my simple task.

Anyway, all I want to do is read in a series of key-value pairs from a file.  I thought a list would be a good way to keep these, such that I could access them like: listname$key

I was imagining a file like this:
key1 value1
key2 value2
key3 value3
...

(the keys will always be character strings, the values might be other types, but they will always be single items)

I won't bore you with all the things I've tried. I'm sure I'm overlooking something basic and simple, but I would greatly appreciate it if someone could help me out here.

Thank you.

Best wishes,
Anne

Reply | Threaded
Open this post in threaded view
|

Re: reading in a (very simple) list from a file

arun kirshna
Hi,
May be this:
set.seed(1)
 dat1<-data.frame(keys=paste0("key",1:5),value=sample(1:15,5,replace=TRUE))
list1<-lapply(split(dat1,dat1$keys),`[`,2)
list1$key2
#  value
#2     6

A.K.



----- Original Message -----
From: VA Smith <[hidden email]>
To: [hidden email]
Cc:
Sent: Wednesday, October 10, 2012 1:29 PM
Subject: [R] reading in a (very simple) list from a file

Apologies - I feel this is a very simple thing to do yet I am failing
massively. I keep finding information about how to do much more complicated
things (usually on this mailing list!), which then fail when I try to apply
it to my simple task.

Anyway, all I want to do is read in a series of key-value pairs from a file.
I thought a list would be a good way to keep these, such that I could access
them like: listname$key

I was imagining a file like this:
key1 value1
key2 value2
key3 value3
...

(the keys will always be character strings, the values might be other types,
but they will always be single items)

I won't bore you with all the things I've tried. I'm sure I'm overlooking
something basic and simple, but I would greatly appreciate it if someone
could help me out here.

Thank you.

Best wishes,
Anne





--
View this message in context: http://r.789695.n4.nabble.com/reading-in-a-very-simple-list-from-a-file-tp4645741.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
[hidden email] mailing list
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.


______________________________________________
[hidden email] mailing list
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: reading in a (very simple) list from a file

arun kirshna
In reply to this post by VA Smith
HI,

By modifying the earlier solution using sapply()

set.seed(1)
 dat1<-data.frame(keys=paste0("key",1:5),value=sample(1:15,5,replace=TRUE))
list2<-sapply(split(dat1,dat1$keys),`[`,2)
 names(list2)<-dat1[,1]
list2$key2
#[1] 6
A.K.

----- Original Message -----
From: VA Smith <[hidden email]>
To: [hidden email]
Cc:
Sent: Wednesday, October 10, 2012 1:29 PM
Subject: [R] reading in a (very simple) list from a file

Apologies - I feel this is a very simple thing to do yet I am failing
massively. I keep finding information about how to do much more complicated
things (usually on this mailing list!), which then fail when I try to apply
it to my simple task.

Anyway, all I want to do is read in a series of key-value pairs from a file.
I thought a list would be a good way to keep these, such that I could access
them like: listname$key

I was imagining a file like this:
key1 value1
key2 value2
key3 value3
...

(the keys will always be character strings, the values might be other types,
but they will always be single items)

I won't bore you with all the things I've tried. I'm sure I'm overlooking
something basic and simple, but I would greatly appreciate it if someone
could help me out here.

Thank you.

Best wishes,
Anne





--
View this message in context: http://r.789695.n4.nabble.com/reading-in-a-very-simple-list-from-a-file-tp4645741.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
[hidden email] mailing list
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.


______________________________________________
[hidden email] mailing list
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: reading in a (very simple) list from a file

David Carlson
It might help if you would bore us with at least one or two of the things
you have tried. It seems logical to read the file into a data frame using
read.table(). Then you can change it into any format you want:

> Listname <- read.table(text="key value
Key1 1
Key2 2
Key3 3", header=TRUE)
> Listname
   key value
1 Key1     1
2 Key2     2
3 Key3     3

Just change text=". . . " to file="yourfilename". This will change the key
field into a factor. If you don't want to do that use

> Listname <- read.table(text="key value
Key1 1
Key2 2
Key3 3", header=TRUE, stringsAsFactors=FALSE)

If you want to change the data.frame into a list, just use:

> Listname <- as.list(Listname)

----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352

> -----Original Message-----
> From: [hidden email] [mailto:r-help-bounces@r-
> project.org] On Behalf Of arun
> Sent: Wednesday, October 10, 2012 12:49 PM
> To: VA Smith
> Cc: R help
> Subject: Re: [R] reading in a (very simple) list from a file
>
> HI,
>
> By modifying the earlier solution using sapply()
>
> set.seed(1)
>  dat1<-
> data.frame(keys=paste0("key",1:5),value=sample(1:15,5,replace=TRUE))
> list2<-sapply(split(dat1,dat1$keys),`[`,2)
>  names(list2)<-dat1[,1]
> list2$key2
> #[1] 6
> A.K.
>
> ----- Original Message -----
> From: VA Smith <[hidden email]>
> To: [hidden email]
> Cc:
> Sent: Wednesday, October 10, 2012 1:29 PM
> Subject: [R] reading in a (very simple) list from a file
>
> Apologies - I feel this is a very simple thing to do yet I am failing
> massively. I keep finding information about how to do much more
> complicated
> things (usually on this mailing list!), which then fail when I try to
> apply
> it to my simple task.
>
> Anyway, all I want to do is read in a series of key-value pairs from a
> file.
> I thought a list would be a good way to keep these, such that I could
> access
> them like: listname$key
>
> I was imagining a file like this:
> key1 value1
> key2 value2
> key3 value3
> ...
>
> (the keys will always be character strings, the values might be other
> types,
> but they will always be single items)
>
> I won't bore you with all the things I've tried. I'm sure I'm
> overlooking
> something basic and simple, but I would greatly appreciate it if
> someone
> could help me out here.
>
> Thank you.
>
> Best wishes,
> Anne
>
>
>
>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/reading-in-
> a-very-simple-list-from-a-file-tp4645741.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> [hidden email] mailing list
> 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.
>
>
> ______________________________________________
> [hidden email] mailing list
> 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.

______________________________________________
[hidden email] mailing list
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: reading in a (very simple) list from a file

VA Smith
In reply to this post by arun kirshna
Brilliant!  Thank you both, this works!

Combined with the other suggestion of setting stringsAsFactors to FALSE when reading in the data frame, I now have the behaviour I wanted.

I had been beginning to get the sense that one of the apply functions was the solution.  I will now do some reading on split to understand precisely what I'm doing...

Best wishes,
Anne


Reply | Threaded
Open this post in threaded view
|

Re: reading in a (very simple) list from a file

VA Smith
Hi again! Just in case someone ends up googling this for the same thing I did, here is a modification to get around a little problem:

 dat1<-data.frame(keys=paste("key",5:1,sep=""),value=1:5)
splitlist <- split(dat1,dat1$keys)
list3<-sapply(splitlist,`[`,2)
 names(list3)<-names(splitlist)
list3$key2
[1] 4

Because the list after split is stored in alphabetical order by name, it reorders things, so you need to use that order when you name it.

Thanks again,
Anne