在 Ubuntu 18.04 & R 4.0.2 上安装 tidyr 时出错
Error installing tidyr on Ubuntu 18.04 & R 4.0.2
在尝试安装包 tidyverse
时,我在安装依赖项 tidyr
时遇到错误。
这是我收到的消息的尾部:
cpp11.cpp:31:100: error: ‘unmove’ is not a member of ‘cpp11’
return cpp11::as_sexp(simplifyPieces(cpp11::unmove(cpp11::as_cpp<cpp11::list>(pieces)), cpp11::unmove(cpp11::as_cpp<int>(p)), cpp11::unmove(cpp11::as_cpp<bool>(fillLeft))));
^~~~~~
cpp11.cpp:31:138: error: ‘unmove’ is not a member of ‘cpp11’
return cpp11::as_sexp(simplifyPieces(cpp11::unmove(cpp11::as_cpp<cpp11::list>(pieces)), cpp11::unmove(cpp11::as_cpp<int>(p)), cpp11::unmove(cpp11::as_cpp<bool>(fillLeft))));
^~~~~~
/usr/lib/R/etc/Makeconf:176: recipe for target 'cpp11.o' failed
make: *** [cpp11.o] Error 1
ERROR: compilation failed for package ‘tidyr’
* removing ‘/home/xxx/yyy/tidyr’
Warning in install.packages :
installation of package ‘tidyr’ had non-zero exit status
在我天真的眼中,问题似乎出在 cpp11 上。我看到了一个关于 tidyr installation error due to cpp11 compilation error (R tidyr package installation failed due to cpp11 compilation error (expansion pattern x contains no argument packs)) 的类似问题,但它是针对 RHEL 系统的。
我的系统上安装了最新版本的 gcc/c++ (4:7.4.0-1ubuntu2.3)。还安装了最新版本的系统依赖项libcurl4-openssl-dev libssl-dev libxml2-dev
。
这是 sessionInfo()
的输出:
R version 4.0.2 (2020-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8 LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=en_CA.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] rstudioapi_0.11 magrittr_1.5 usethis_1.6.1 devtools_2.3.1 pkgload_1.1.0 R6_2.4.1 rlang_0.4.7 fansi_0.4.1 tools_4.0.2
[10] pkgbuild_1.1.0 sessioninfo_1.1.1 cli_2.0.2 withr_2.2.0 ellipsis_0.3.1 remotes_2.2.0 assertthat_0.2.1 digest_0.6.25 rprojroot_1.3-2
[19] crayon_1.3.4 processx_3.4.3 callr_3.4.3 fs_1.5.0 ps_1.3.3 curl_4.3 testthat_2.3.2 memoise_1.1.0 glue_1.4.1
[28] compiler_4.0.2 desc_1.2.0 backports_1.1.8 prettyunits_1.1.1
看起来@hadley 几天前发布了 tidyr 更新,基于新的 cpp11 包:https://github.com/tidyverse/tidyr/releases.
出于某种原因,这导致 tidyr 无法为我们构建。
我们的(希望是临时的!)解决方法是这样的:
(1) 删除对 tidyverse
的依赖。相反,显式依赖于子包(如 dplyr/ggplot2/etc。)
(2)按以下方式安装tidyr:
packageurl <- "https://cran.r-project.org/src/contrib/Archive/tidyr/tidyr_1.1.0.tar.gz"
install.packages(packageurl, repos=NULL, type="source")
看起来以下提交正在解决此问题,但不确定何时将其推送到 CRAN:https://github.com/r-lib/cpp11/commit/779669a4d0b07e9f9d9382114f44e4f6ff68eebb
我在这里找到了以下内容:https://github.com/tidyverse/tidyr/issues/1024
解决方法是将 cpp11 降级到 0.1 版:
devtools::install_version("cpp11", version = "0.1", repos = "http://cran.us.r-project.org")
根据@djacobs7、@mkamenet3 和@Leandro R.M. de Marco 的回答,我最终实施了以下对我有用的解决方案。
- 正在删除我从 cran 安装的
cpp11
软件包。
- Re-installing
cpp11
包,但这次来自 github,因为它包含 @mkamenet3 提到的提交。
devtools::install_github("r-lib/cpp11")
- 正常安装
tidyr
install.packages("tidyr")
在尝试安装包 tidyverse
时,我在安装依赖项 tidyr
时遇到错误。
这是我收到的消息的尾部:
cpp11.cpp:31:100: error: ‘unmove’ is not a member of ‘cpp11’
return cpp11::as_sexp(simplifyPieces(cpp11::unmove(cpp11::as_cpp<cpp11::list>(pieces)), cpp11::unmove(cpp11::as_cpp<int>(p)), cpp11::unmove(cpp11::as_cpp<bool>(fillLeft))));
^~~~~~
cpp11.cpp:31:138: error: ‘unmove’ is not a member of ‘cpp11’
return cpp11::as_sexp(simplifyPieces(cpp11::unmove(cpp11::as_cpp<cpp11::list>(pieces)), cpp11::unmove(cpp11::as_cpp<int>(p)), cpp11::unmove(cpp11::as_cpp<bool>(fillLeft))));
^~~~~~
/usr/lib/R/etc/Makeconf:176: recipe for target 'cpp11.o' failed
make: *** [cpp11.o] Error 1
ERROR: compilation failed for package ‘tidyr’
* removing ‘/home/xxx/yyy/tidyr’
Warning in install.packages :
installation of package ‘tidyr’ had non-zero exit status
在我天真的眼中,问题似乎出在 cpp11 上。我看到了一个关于 tidyr installation error due to cpp11 compilation error (R tidyr package installation failed due to cpp11 compilation error (expansion pattern x contains no argument packs)) 的类似问题,但它是针对 RHEL 系统的。
我的系统上安装了最新版本的 gcc/c++ (4:7.4.0-1ubuntu2.3)。还安装了最新版本的系统依赖项libcurl4-openssl-dev libssl-dev libxml2-dev
。
这是 sessionInfo()
的输出:
R version 4.0.2 (2020-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8 LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=en_CA.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] rstudioapi_0.11 magrittr_1.5 usethis_1.6.1 devtools_2.3.1 pkgload_1.1.0 R6_2.4.1 rlang_0.4.7 fansi_0.4.1 tools_4.0.2
[10] pkgbuild_1.1.0 sessioninfo_1.1.1 cli_2.0.2 withr_2.2.0 ellipsis_0.3.1 remotes_2.2.0 assertthat_0.2.1 digest_0.6.25 rprojroot_1.3-2
[19] crayon_1.3.4 processx_3.4.3 callr_3.4.3 fs_1.5.0 ps_1.3.3 curl_4.3 testthat_2.3.2 memoise_1.1.0 glue_1.4.1
[28] compiler_4.0.2 desc_1.2.0 backports_1.1.8 prettyunits_1.1.1
看起来@hadley 几天前发布了 tidyr 更新,基于新的 cpp11 包:https://github.com/tidyverse/tidyr/releases.
出于某种原因,这导致 tidyr 无法为我们构建。
我们的(希望是临时的!)解决方法是这样的:
(1) 删除对 tidyverse
的依赖。相反,显式依赖于子包(如 dplyr/ggplot2/etc。)
(2)按以下方式安装tidyr:
packageurl <- "https://cran.r-project.org/src/contrib/Archive/tidyr/tidyr_1.1.0.tar.gz"
install.packages(packageurl, repos=NULL, type="source")
看起来以下提交正在解决此问题,但不确定何时将其推送到 CRAN:https://github.com/r-lib/cpp11/commit/779669a4d0b07e9f9d9382114f44e4f6ff68eebb
我在这里找到了以下内容:https://github.com/tidyverse/tidyr/issues/1024
解决方法是将 cpp11 降级到 0.1 版:
devtools::install_version("cpp11", version = "0.1", repos = "http://cran.us.r-project.org")
根据@djacobs7、@mkamenet3 和@Leandro R.M. de Marco 的回答,我最终实施了以下对我有用的解决方案。
- 正在删除我从 cran 安装的
cpp11
软件包。 - Re-installing
cpp11
包,但这次来自 github,因为它包含 @mkamenet3 提到的提交。
devtools::install_github("r-lib/cpp11")
- 正常安装
tidyr
install.packages("tidyr")