【问题标题】:R - What does "incomplete block on file" mean?R - “文件中的不完整块”是什么意思?
【发布时间】:2020-08-13 02:30:24
【问题描述】:

我正在使用 RStudio,并尝试在我当前的项目中使用 packrat。 我点击复选框“将此项目使用 packrat”,然后按 OK,我从控制台获得以下输出:

    > packrat::init()
Initializing packrat project in directory:
- "/Users/Ash/Dropbox/Uni/2014/Thesis/Code/R"

Adding these packages to packrat:
            _         
    packrat   0.4.0.12

Fetching sources for packrat (0.4.0.12) ... Error in snapshotSources(project, activeRepos(project), allRecordsFlat) : 
  Errors occurred when fetching source files:
Error in untar2(tarfile, files, list, exdir, restore_times) : 
  incomplete block on file

我在此错误上找不到太多信息,但根据 this 代码(搜索错误字符串,文件块不完整),这似乎与意外的文件长度/大小有关。

我认为下载可能已损坏?但是我已经尝试了很多次了。

或者我没有正确的权限?但是项目文件在这里应该没有问题。

还有其他人遇到过这个问题吗?

【问题讨论】:

  • 相关:我在尝试安装 devtools 时遇到了这个问题。尝试安装 curl 时上游失败,因为我没有安装 libcurl4 开发包。通过在 Ubuntu 上执行 sudo apt-get install libcurl4-openssl-dev 解决了这个问题。

标签: r package


【解决方案1】:

我认为下载可能已损坏?但是我已经尝试了很多次了。

是的。下载可能会损坏,或者根据 R 帮助 邮件列表中的this thread,该问题可能是由服务器本身的损坏包引起的。后一种情况可以通过选择不同的镜像下载包来解决。

注意我将描述一个解决方案,它使用 R 控制台而不是 Rstudio GUI,因为我曾经以这种方式安装包。所描述的方法可能也适用于从 GUI 安装包。

当您通过执行从 R 控制台安装包时:

> install.packages("<package_name>")

您会看到可供选择的可用镜像列表:

 1: 0-Cloud [https]                2: Austria [https]
 3: Chile [https]                  4: China (Beijing 4) [https]
 ...

只需选择另一个(最好是靠近您的位置以便更快下载)。


如果您没有看到这样的选择,但立即开始下载,则您已配置默认镜像(例如 Rstudio 自动将 https://cran.rstudio.com/ 设置为默认值)。您可以通过发出以下命令检查您选择的镜像:

> getOption("repos")["CRAN"]
                       CRAN
"https://cran.rstudio.com/"

要重置默认镜像,您可以使用以下命令:

> r <- getOption("repos")
> r["CRAN"] <- "@CRAN@"
> options(repos=r)

现在,当您尝试安装新软件包时,您可以如上所述选择另一个镜像。

【讨论】:

  • 谢谢亚斯拉夫。我不再拥有导致此问题的项目代码,因此无法验证。我已标记为正确,因为这似乎是一个合理的解释和解决方案。 :)
【解决方案2】:

在一百万年后回答...但是如果有人像我一样在寻找 Error in untar2(tarfile, files, list, exdir, restore_times) : incomplete block on file 时来到这里,您的问题可能与您的代码中存在私有包有关。

关注此thread。 最后一条评论救了我的命。

您需要构建自定义私有包的 tar.gz 并将其保存为唯一文件夹。 从那里运行这段代码:

packrat::set_opts(local.repos = "path/to/the/folder/with/your/tar.gz/files")
packrat::install_local('yourpackage')

之后,再次运行packarat::init(),这又会是快乐的一天。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多