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)

任何帮助,将不胜感激。

谢谢

4

3 回答 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

编辑对 OP 评论的回应。

从文档中:

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

所以你可以试试这个:

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

这也适用于我,但这会使您的工作目录变得混乱。如果这不起作用,请尝试将method="curl"调用设置为download.file(...).

于 2014-07-20T01:01:25.647 回答
2

我以前也遇到过这个问题,我发现最可靠的解决方案是使用source_url来自奇妙的 [devtools][1] 包的微小修改。这对我有用(在 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)
}

我使用非常相似的修改从 github 获取文本文件read.table,等等。请注意,您需要使用 github URL 的“原始”版本(您在问题中包含)。

[1] https://github.com/hadley/devtoolspackage

于 2016-09-21T16:50:23.490 回答
0

load需要一个文件名。

x <- RCurl::getURL("https://github.com/thefactmachine/hex-binning-gis-data/raw/master/popDensity.RData")
writeLines(x, tmp <- tempfile())
y <- load(tmp)
于 2014-07-20T01:01:15.747 回答