[R] saveRDS() and readRDS() Why?

Robert David Burbidge robertburbidged@t@ @ending from y@hoo@co@uk
Wed Nov 7 10:10:56 CET 2018


If the file sizes are the same, then presumably both contain the binary data. From the serialize function help:

"As almost all systems in current use are little-endian, xdr = FALSE can be used to avoid byte-shuffling at both ends when transferring data from one little-endian machine to another (or between processes on the same machine). Depending on the system, this can speed up serialization and unserialization by a factor of up to 3x."

So you could try:

# windows (not run)
f <- file("rawData.rds", open="w")
serialize(rawData, f, xdr = FALSE)
close(f)

# linux
rawData <- unserialize(file = "rawData.rds")

HTH

On 07/11/18 08:45, Patrick Connolly wrote:

> On Wed, 07-Nov-2018 at 08:27AM +0000, Robert David Burbidge wrote:
>
> |> Hi Patrick,
> |>
> |> From the help: "save writes a single line header (typically
> |> "RDXs\n") before the serialization of a single object".
> |>
> |> If the file sizes are the same (see Eric's message), then the
> |> problem may be due to different line terminators. Try serialize and
> |> unserialize for low-level control of saving/reading objects.
>
> I'll have to find out what 'serialize' means.
>
> On Windows, it's a huge table, looks like it's all hexadecimal.
>
> On Linux, it's just the text string 'rawData' -- a lot more than line
> terminators.
>
> Have I misunderstood what the idea is?  I thought I'd get an identical
> object, irrespective of how different the OS stores and zips it.
>
>
>
> |>
> |> Rgds,
> |>
> |> Robert
> |>
> |>
> |> On 07/11/18 08:13, Eric Berger wrote:
> |> >What do you see at the OS level?
> |> >i.e. on windows
> |> >DIR rawData.rds
> |> >on linux
> |> >ls -l rawData.rds
> |> >compare the file sizes on both.
> |> >
> |> >
> |> >On Wed, Nov 7, 2018 at 9:56 AM Patrick Connolly <p_connolly using slingshot.co.nz>
> |> >wrote:
> |> >
> |> >> From a Windows R session, I do
> |> >>
> |> >>>object.size(rawData)
> |> >>31736 bytes  # from scraping a non-reproducible web address.
> |> >>>saveRDS(rawData, file = "rawData.rds")
> |> >>Then copy to a Linux session
> |> >>
> |> >>>rawData <- readRDS(file = "rawData.rds")
> |> >>>rawData
> |> >>[1] "rawData"
> |> >>>object.size(rawData)
> |> >>112 bytes
> |> >>>rawData
> |> >>[1] "rawData" # only the name and something to make up 112 bytes
> |> >>Have I misunderstood the syntax?
> |> >>
> |> >>It's an old version on Windows.  I haven't used Windows R since then.
> |> >>
> |> >>major          3
> |> >>minor          2.4
> |> >>year           2016
> |> >>month          03
> |> >>day            16
> |> >>
> |> >>
> |> >>I've tried R-3.5.0 and R-3.5.1 Linux versions.
> |> >>
> |> >>In case it's material ...
> |> >>
> |> >>I couldn't get the scraping to work on either of the R installations
> |> >>but Windows users told me it worked for them.  So I thought I'd get
> |> >>the R object and use it.  I could understand accessing the web address
> |> >>could have different permissions for different OSes, but should that
> |> >>affect the R objects?
> |> >>
> |> >>TIA
> |> >>
> |> >>-
>



More information about the R-help mailing list