2009-09-16 29 views
10

Diciamo che voglio riprodurre un esempio pubblicato su StackOverflow. Alcuni hanno suggerito che i poster utilizzino lo dput() to help streamline this process o uno degli datasets available in the base package.Come caricare i set di dati di esempio in R?

In questo caso, però, immagino mi è stato dato solo l'uscita del dataframe:

> 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 

Devo altre opzioni oltre a salvare questo come un file di testo e utilizzando read.table()?

risposta

8

Ecco una possibilità a portata di mano:

site.data <- read.table(textConnection(
"  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")) 
+1

E 'migliori pratiche per chiudere in modo esplicito il textConnection, vale a dire site.data <- read.table (tc <- textConnection ("...")); chiudi (tc) –

12

Questa è una soluzione chiara. Sto indovinando c'è un modo per farlo con RCurl, as in this post which scraped off wikipedia.

Ma come punto di discussione più generale: perché non usiamo solo i dati dal pacchetto "dataset" in R? Quindi tutti avranno i dati semplicemente chiamando la funzione data(), e ci sono serie di dati per coprire la maggior parte dei casi.

[Modifica]: Sono stato in grado di farlo. È chiaramente più lavoro (es. Impraticabile) della tua soluzione. :)

[Modifica 2]: L'ho spostato in una funzione e l'ho provato con un'altra pagina.

getSOTable <- function(url, code.block=2, raw=FALSE, delimiter="code") { 
    require(RCurl) 
    require(XML) 

    webpage <- getURL(url) 
    webpage <- readLines(tc <- textConnection(webpage)); close(tc) 
    pagetree <- htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE) 
    x <- xpathSApply(pagetree, paste("//*/", delimiter, sep=""), xmlValue)[code.block] 
    if(raw) 
    return(strsplit(x, "\n")[[1]]) 
    else 
    return(read.table(textConnection(strsplit(x, "\n")[[1]][-1]))) 
} 

getSOTable("https://stackoverflow.com/questions/1434897/how-do-i-load-example-datasets-in-r") 
    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 

getSOTable("https://stackoverflow.com/questions/1428174/quickly-generate-the-cartesian-product-of-a-matrix", code.block=10) 
    X1 X2 X3 X4 
1 1 11 1 11 
2 1 11 2 12 
3 1 11 3 13 
4 1 11 4 14 
5 1 11 5 15 
6 1 11 6 16 
7 1 11 7 17 
8 1 11 8 18 
9 1 11 9 19 
10 1 11 10 20 
+1

Concordato. Incoraggiare questo sarebbe l'ideale. –

Problemi correlati