从Github导入数据(rdata)到R

11

我希望在Github上上传一些R代码以及相关的数据文件(RData)。

到目前为止,一切都正常。但是当其他人克隆这个仓库时,我希望他们能够立即运行代码。但是现在这是不可能的,因为他们必须将工作目录(setwd)更改为下载RData文件的目录。

因此,我考虑改变R代码,使其链接到Github上的RData文件可能会更容易。但是我无法使用以下片段使其正常工作,我认为这可能涉及文本/二进制问题。

x <- RCurl::getURL("https://github.com/thefactmachine/hex-binning-gis-data/raw/master/popDensity.RData")
y <- load(x)

任何帮助都将不胜感激。

谢谢

3个回答

11

这对我有效:

githubURL <- "https://github.com/thefactmachine/hex-binning-gis-data/raw/master/popDensity.RData"
load(url(githubURL))
head(df)
#          X        Y        Z
# 1 16602794 -4183983 94.92019
# 2 16602814 -4183983 91.15794
# 3 16602834 -4183983 87.44995
# 4 16602854 -4183983 83.79617
# 5 16602874 -4183983 80.19643
# 6 16602894 -4183983 76.65052

编辑 对楼主的评论做出回应。

根据文档:

请注意,除 Windows 外,不支持 https:// URL 方案。

所以你可以尝试这样做:

download.file(githubURL,"myfile")
load("myfile")

这对我也有效,但会使您的工作目录混乱。如果不起作用,请尝试在调用download.file(...)时设置method="curl"


非常感谢您的发帖。当我尝试上面的代码时,出现了以下错误消息:Error in load(url(githubURL)) : cannot open the connection。我正在使用 R Studio。 - markthekoala
我认为问题与使用 https 有关。请查看我的编辑,以获取可能适用的替代方案 - 很难确定,因为所有这些都在我的系统上工作。如果您只是将 URL 更改为 http://...,会发生什么?对我也起作用。 - jlhoward
1
download.file 中的 load 导致了 _bad restore file magic number (file may be corrupted) -- no data loaded_。对我有效的方法是:load(url(githubURL)) - Pablo Casas

2

我之前也遇到过这个问题,而我发现最可靠的解决方法是使用来自[devtools][1]包的source_url的微小修改。这对我(在Mac上)有效。

load_url <- function (url, ..., sha1 = NULL) {
  # based very closely on code for devtools::source_url
  stopifnot(is.character(url), length(url) == 1)
  temp_file <- tempfile()
  on.exit(unlink(temp_file))
  request <- httr::GET(url)
  httr::stop_for_status(request)
  writeBin(httr::content(request, type = "raw"), temp_file)
  file_sha1 <- digest::digest(file = temp_file, algo = "sha1")
  if (is.null(sha1)) {
    message("SHA-1 hash of file is ", file_sha1)
  }
  else {
    if (nchar(sha1) < 6) {
      stop("Supplied SHA-1 hash is too short (must be at least 6 characters)")
    }
    file_sha1 <- substr(file_sha1, 1, nchar(sha1))
    if (!identical(file_sha1, sha1)) {
      stop("SHA-1 hash of downloaded file (", file_sha1, 
           ")\n  does not match expected value (", sha1, 
           ")", call. = FALSE)
    }
  }
  load(temp_file, envir = .GlobalEnv)
}

我使用类似的修改来使用 read.table 等方式从 GitHub 获取文本文件。请注意,您需要使用 GitHub URL 的 "raw" 版本(这是您在问题中包含的)。
[1] https://github.com/hadley/devtoolspackage

1

load 函数需要一个文件名作为参数。

x <- RCurl::getURL("https://github.com/thefactmachine/hex-binning-gis-data/raw/master/popDensity.RData")
writeLines(x, tmp <- tempfile())
y <- load(tmp)

1
感谢您的发布。我尝试了上面的解决方案,但是出现了以下错误信息。我尝试了几个不同的文件。错误:恢复文件魔数错误(文件可能已损坏)-未加载任何数据。 另外:警告消息: 文件“filef00b79947a46”没有魔数'' 使用2之前的保存版本是不推荐的。 - markthekoala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接