[R] Unexpected behaviour of write.csv - read.csv

Rainer M Krug r.m.krug at gmail.com
Thu Jan 13 15:08:43 CET 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 01/13/2011 02:56 PM, Duncan Murdoch wrote:
> On 11-01-13 6:26 AM, Rainer M Krug wrote:
> Hi
> 
> Assuming the following:
> 
>>>> x<- data.frame(a=1:10, b=runif(10))
>>>> str(x)
> 'data.frame':    10 obs. of  2 variables:
>   $ a: int  1 2 3 4 5 6 7 8 9 10
>   $ b: num  0.692 0.325 0.634 0.16 0.873 ...
>>>> write.csv(x, "x.csv")
>>>> x2<- read.csv("x.csv")
>>>> str(x2)
> 'data.frame':    10 obs. of  3 variables:
>   $ X: int  1 2 3 4 5 6 7 8 9 10
>   $ a: int  1 2 3 4 5 6 7 8 9 10
>   $ b: num  0.692 0.325 0.634 0.16 0.873 ...
>>>>
> 
> Using the two functions write.csv and read.csv, I would assume, that the
> resulting data.frame x2 be identical with x, but it has an additional
> column X, which contains the row names of x.
> 
> I know read.table and write.table which work as expected, but I would
> like to use a csv for data exchange reasons.
> 
> I know that I can use
> write.csv(x, "x.csv", row.names=FALSE)
> 
> and it would work, but shouldn't that be the default behaviour?
> 
>> I don't think so.  The CSV format is an export format which holds less
>> information than a dataframe.  By exporting the dataframe to CSV and
>> importing the result, you are discarding information and you should
>> expect to get something different.

OK - I can follow this logic - and I think I can accept it.

> 
>> If you want to save a dataframe to disk and read it back unchanged, you
>> should use save() and load().

And now my question from a previous thread (write.table equivalent for
lists?) comes up again:

using save() and load() definitely works, but it is highly unsave - as
it even keeps the names of the object, more then one can be saved, I can
not easily assign the saved object to a new name, I have problems using
the saved object if I have forgotten what the variable name was.

So I would like to expand my previous question: what are the proper
functions to store R objects? One could argue that all write...
functions are export functions - therefore keeping the data, but not
necessarily column names, rownames, attributes, ...

So what can I really do to save an R object for later usage in R?

Rainer

> 
>> Duncan Murdoch
> 
> 
> And if this is not compliant with csv files, shouldn't the function
> read.csv convert the first column into the row names?
> 
> Cheers,
> 
> Rainer
> 
>>
______________________________________________
R-help at r-project.org 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.

- -- 
Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation
Biology, UCT), Dipl. Phys. (Germany)

Centre of Excellence for Invasion Biology
Natural Sciences Building
Office Suite 2039
Stellenbosch University
Main Campus, Merriman Avenue
Stellenbosch
South Africa

Tel:        +33 - (0)9 53 10 27 44
Cell:       +27 - (0)8 39 47 90 42
Fax (SA):   +27 - (0)8 65 16 27 82
Fax (D) :   +49 - (0)3 21 21 25 22 44
Fax (FR):   +33 - (0)9 58 10 27 44
email:      Rainer at krugs.de

Skype:      RMkrug
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk0vB2oACgkQoYgNqgF2egqenQCeJJNdIiX2faKBPGeilzOz73wM
RmoAn05oGZvo41wCp1+hWwTqTmNoQrNo
=xfWD
-----END PGP SIGNATURE-----



More information about the R-help mailing list