从github直接加载.RData文件

5

我想从https://github.com/myaseen208/PakPMICS2018Data/加载PakPMICS2018bh.RData数据,并使用以下代码,但出现了错误:

library(RCurl)
PakPMICS2018bhURL <- "https://github.com/myaseen208/PakPMICS2018Data/raw/master/PakPMICS2018bh.RData"
load(url(PakPMICS2018bhURL))

加载(url(PakPMICS2018bhURL))时出错: 输入不以可与从连接加载兼容的魔法数字开头

我想知道我的代码有什么问题,请帮忙。

3个回答

2
问题不在您的代码上,它应该可以正常工作。 例如,以下代码可以正常从GitHub加载Rdata文件。最初的回答
load(url("https://github.com/mawp/spict/raw/master/spict/data/pol.rda"))

您的问题源于您尝试打开的文件,它们是使用在R版本3.5中引入的序列化格式3保存的,使用save(version=3)
R具有新的序列化格式(版本3),支持ALTREP框架对象的自定义序列化。这些对象仍然可以以格式2进行序列化,但效率较低。序列化格式3还记录未标记字符串的当前本地编码,并在在不同本地编码下运行的R中反序列化时转换它们。格式3带有新的序列化魔术数字(RDA3,RDB3,RDX3)。可以通过在save()、serialize()和saveRDS()中使用version = 3来选择格式3,但格式2仍是所有工作区序列化和保存的默认值。 格式3中的序列化数据无法被3.5.0版本之前的R版本读取。 编辑 经过更多的研究,我认为这是一个bug(或者是一个特性?)。 对于使用compression参数等于FALSETRUEgz保存的文件,在R版本>=3.5中代码按预期工作。但对于压缩等于xz的情况,似乎是您的情况,它不起作用。
有两个选择:要么使用gz压缩保存文件,要么使用@user113156答案中的解决方法。

感谢@alko989的回答。我正在使用R版本3.6.0,那么在这种情况下你有什么建议?我该怎么做? - MYaseen208
1
我只是在测试一下(在Ubuntu上将R升级到3.5有些困难),似乎load函数与新的序列化格式不兼容。可能是个bug。 - alko989

1
你可以尝试这个:
只需确保设置你的工作目录。
setwd("SET YOUR Working Directory - the file will download here")
working_directory <- getwd()
if (!file.exists("PakPMICS2018bh.RData")) {
  download.file(   "https://github.com/myaseen208/PakPMICS2018Data/raw/master/PakPMICS2018bh.RData",   "PakPMICS2018bhURL.RData")

  load(file.path(working_directory, "PakPMICS2018bhURL.RData"))
  } 

感谢@user113156的回答。我的代码有什么问题吗?实际上,我只想加载数据而不下载它。有什么想法,请告诉我。 - MYaseen208
我不确定我理解技术上的区别。如何在不下载数据的情况下加载它?目标是下载到临时文件还是确保源文件在加载后被删除? - Jon Spring

0
如果只需要“读取”而不是“加载”文件,那么这对我来说是可行的:
readRDS(url("https://.../FILENAME.rda"))

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