readRDS 在 Windows 中似乎不起作用的原因是什么?

What's the reason that readRDS doesn't seem to work in Windows?

我正在尝试使我的代码可移植到 Windows 并意识到即使我使用 file.path 创建路径仍然 readRDS 函数不起作用,因为示例:

file.exists('C:/temp/HarvardX-Skillability/data/rds/Users.rds')
> TRUE
readRDS('C:/temp/HarvardX-Skillability/data/rds/Users.rds')
> Error in readRDS("C:/temp/HarvardX-Skillability/data/rds/Users.rds") : 
  error reading from connection

我也试过:

 file.exists('data/rds/Users.rds')
 > TRUE
 readRDS('data/rds/Users.rds')
 > Error in readRDS("data/rds/Users.rds") : error reading from connection

这是为什么?我该如何解决?在 Ubuntu 18.04 中完美运行...

问题似乎与下载/从GitHub 克隆文件有关。在 your repository 运行 git clone 之后,当我在文本编辑器中打开 Tags.rds 的本地副本时,我看到了这个:

version https://git-lfs.github.com/spec/v1
oid sha256:b4a2cb3775126a3895e9533ef9ef4ad786b2021cfd1660b07028fbef85b025bb
size 641098

(这是文件的全部内容)。此外,运行 file Tags.rds(在 MacOS 的终端中)报告 Tags.rds: ASCII text。 (所有 .rds 个文件都是这样。)

GitHub 网络界面确认您的文件在存储库中没有问题:

看起来相关。安装 Git LFS 和 运行 git lfs pull 后,我下载了完整的文件(readRDS() 似乎工作正常)。

OP 的罪魁祸首确实出乎意料,我也没有提供相关信息,因为我无法怀疑这是问题所在。

问题是这些文件是使用 download.file(url, filePath, extra="L") 自动下载的,在 Windows 中,这已知会导致二进制文件出现问题,而这些文件不是预期的文件。这就是无法识别 rds 文件的原因。

我在构建异常处理恢复代码时发现,该代码试图从 Dropbox 文件夹下载相同的文件,然后遇到了同样的问题,因此这不是因为 Git LFS。

OP 解决方案是添加参数 download.file(..., mode="wb")

看问题