【问题标题】:What's the reason that readRDS doesn't seem to work in Windows?readRDS 在 Windows 中似乎不起作用的原因是什么?
【发布时间】:2020-01-08 16:04:49
【问题描述】:

我正在尝试使我的代码可移植到 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 中完美运行...

【问题讨论】:

  • 如果您正确传输它们,它们是可移植的。这些文件目前是否具有相同的 md5sum?你能在 windows 机器和 Ubuntu 机器上检查tools::md5sum(Users.rds") 以确保它被正确传输吗?
  • 您是如何将文件从 Ubuntu 计算机获取到 windows 计算机的?你用的是ftp吗? SCP?网络文件系统?自己发邮件?
  • 尝试打开最小的Tags.rds 会产生更多信息错误:ReadItem: unknown type 27, perhaps written by later version of R
  • 如果您将 repo URL 添加到您的问题中会有所帮助...
  • *.rds filter=lfs diff=lfs merge=lfs -text 中的 .gitattributes 行看起来很麻烦,因为 rds 文件不是文本文件。这一切似乎都是 git 问题,而不是 R 问题。

标签: r windows git rds git-lfs


【解决方案1】:

问题似乎与从 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 Web 界面确认您的文件在 repo 上正常:

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

【讨论】:

  • 它们由git-lfs 管理,也许与此有关。我 100% 肯定它可以在 Ubuntu 上运行。问题正在从 Windows 中打开。
  • 好的,我会检查...需要先重启:)
  • PS 我想给自己一个赏金来解决这个问题:-)
  • 非常感谢!当您建议数据文件已损坏时,您让我大汗淋漓……截止日期为 2 天,使用 create_dataset.r 脚本生成这些文件需要花费数小时……我真的会给您赏金,但既然您差点让我心脏病发作,作为补偿,我将保留赏金:D
  • 我在 Linux (Ubuntu 18.04) 中测试了以下操作,克隆项目,然后删除 rds 文件并运行自动从 GitHub 下载文件的功能,它运行良好。我不知道为什么以完全相同的方式从 Windows 下载它不起作用。
【解决方案2】:

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

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

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

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

查看问题R trouble unzipping file under Windows

【讨论】:

    猜你喜欢
    • 2022-11-26
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多