Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to export the definition of an R object to plain text so that others can recreate it?

Let's say you have this data in R, and you want to post a question on stackoverflow. For others to best help you, it would be nice if they could have a copy of your object (dataframe, vector, etc) to work with.

Let's say your data is in a data frame called site.data

> site.data
    site year     peak
1  ALBEN    5 101529.6
2  ALBEN   10 117483.4
3  ALBEN   20 132960.9
8  ALDER    5   6561.3
9  ALDER   10   7897.1
10 ALDER   20   9208.1
15 AMERI    5  43656.5
16 AMERI   10  51475.3
17 AMERI   20  58854.4

How do you package it up so that the users can recreate the data exactly as you have it?

You want to do this without having people download a text file and import it.

(Note: These data subsetted from an example of the REvolutions blog)

like image 908
Dan Goldstein Avatar asked Aug 12 '09 09:08

Dan Goldstein


2 Answers

The dput command writes an ASCII representation. If instead of a filename you put "" it will write it to the console

> dput(site.data,"")
structure(list(site = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L), .Label = c("ALBEN", "ALDER", "AMERI"), class = "factor"), 
    year = c(5L, 10L, 20L, 5L, 10L, 20L, 5L, 10L, 20L), peak = c(101529.6, 
    117483.4, 132960.9, 6561.3, 7897.1, 9208.1, 43656.5, 51475.3, 
    58854.4)), .Names = c("site", "year", "peak"), row.names = c(1L, 
2L, 3L, 8L, 9L, 10L, 15L, 16L, 17L), class = "data.frame")

Just copy the structure and put it after "site.data=" in your example code and people will be able to recreate the data frame exactly as you have it.

like image 162
Dan Goldstein Avatar answered Oct 23 '22 01:10

Dan Goldstein


Actually, in your original example, the way you've pasted your data in column format works just fine. I just copied your text from the web page, and did this (using OS X so I have the nice "paste" command):

> site.data <- read.table(pipe("pbpaste"))

For toy data like something posted as a test case, this is often the best approach. To be extra-precise, dput() is good, as dggoldst says.

like image 41
Ken Williams Avatar answered Oct 23 '22 03:10

Ken Williams