Как мне загрузить примеры наборов данных в R? - PullRequest
10 голосов
/ 16 сентября 2009

Допустим, я хочу воспроизвести пример, размещенный в StackOverflow. Некоторые предлагают использовать плакаты dput() для упрощения этого процесса или один из наборов данных, доступных в базовом пакете .

В этом случае, однако, предположим, что мне дали только выходные данные кадра данных:

> 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

Есть ли у меня другие варианты, кроме сохранения этого в виде текстового файла и использования read.table()?

Ответы [ 2 ]

12 голосов
/ 16 сентября 2009

Это аккуратное решение. Я предполагаю, что есть способ сделать это с RCurl, , как в этом посте, который соскоблил wikipedia .

Но в качестве более общего вопроса для обсуждения: почему бы нам просто не использовать данные из пакета "наборов данных" в R? Тогда каждый получит данные, просто вызвав функцию data (), и есть наборы данных для большинства случаев.

[Редактировать]: Я смог сделать это. Это явно больше работы (т.е. нецелесообразно), чем ваше решение. :)

[Редактировать 2]: Я обернул это в функцию и попробовал с другой страницей.

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("/1154049/kak-mne-zagruzit-primery-naborov-dannyh-v-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
8 голосов
/ 16 сентября 2009

Вот один удобный вариант:

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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...