Как загрузить примерные наборы данных в R?
Скажем, я хочу воспроизвести пример, опубликованный в 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()
?
Ответы
Ответ 1
Здесь один удобный вариант:
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"))
Ответ 2
Это аккуратное решение. Я предполагаю, что есть способ сделать это с помощью RCurl, как в этом сообщении, которое очистило wikipedia.
Но как более общий момент для обсуждения: почему бы нам просто не использовать данные из пакета "набора данных" в R? Затем все будут иметь данные, просто вызвав функцию data(), и в большинстве случаев есть наборы данных.
[Edit]: Я смог это сделать. Это явно больше работы (т.е. Нецелесообразно), чем ваше решение.:)
[Edit 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("https://stackoverflow.com/info/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/info/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