【问题标题】:Importing data into R (rdata) from Github从 Github 将数据导入 R (rdata)
【发布时间】:2014-09-10 20:07:00
【问题描述】:

我想在 Github 上放一些 R 代码和相关的数据文件(RData)。

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

因此,我认为如果我更改 R 代码使其链接到 github 上的 RData 文件可能会更容易。但我无法使用以下 sn-p 使其工作。我想也许有一些问题文本/二进制问题。

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

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: r github rdata


    【解决方案1】:

    load 采用文件名。

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

    【讨论】:

    • 感谢发帖。我尝试了上面的解决方案,但收到以下消息。我尝试了几个不同的文件。错误:坏恢复文件幻数(文件可能已损坏)-未加载数据另外:警告消息:文件'filef00b79947a46'具有幻数''不推荐使用2之前的保存版本
    【解决方案2】:

    这对我有用:

    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")
    

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

    【讨论】:

    • 感谢发帖。当我尝试上面的代码时收到以下错误消息:加载错误(url(githubURL)):无法打开我正在使用 R Studio 的连接。
    • 我认为问题在于使用https。请参阅我对(可能)有效的替代方案的编辑 - 因为所有这些都在我的系统上工作,所以很难知道。如果您只是将 url 更改为 http://...,会发生什么?这也适用于我。
    • 来自download.fileload 导致还原文件幻数错误(文件可能已损坏)- 未加载数据。什么对我有用:load(url(githubURL)).
    【解决方案3】:

    我以前也遇到过这个问题,我发现最可靠的解决方案是使用来自奇妙的 [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)
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      相关资源
      最近更新 更多