2009-09-16 9 views
10

Disons que je veux reproduire un exemple publié sur StackOverflow. Certains ont suggéré des affiches utilisent dput() to help streamline this process ou l'un des datasets available in the base package.Comment charger des exemples de jeux de données dans R?

Dans ce cas, cependant, suppose que je n'ai été donné la sortie du 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 

Dois-je d'autres options que l'enregistrement en tant que fichier texte et en utilisant read.table()?

Répondre

8

est ici une option pratique:

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

Il est préférable de fermer explicitement la pratique du textConnection, à savoir site.data <- read.table (tc <- textConnection ("...")); fermer (ct) –

12

C'est une solution élégante. Je suppose qu'il y a un moyen de le faire avec RCurl, as in this post which scraped off wikipedia.

Mais comme un point de discussion plus général: pourquoi n'utilisons-nous pas simplement les données du paquet "datasets" dans R? Ensuite, tout le monde aura les données en appelant simplement la fonction data(), et il y a des datasets pour couvrir la plupart des cas.

[Éditer]: J'ai été capable de faire ceci. Il est clairement plus de travail (c'est-à-dire impraticable) que votre solution. :)

[Éditer 2]: J'ai enveloppé ceci dans une fonction et l'ai essayé avec une autre page.

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

D'accord. Encourager cela serait idéal. –

Questions connexes