为什么R在安装包时会尝试编译从.Rprofile写入stdout的字符串?

问题描述 投票:1回答:1

我在尝试安装包wordcloud时遇到了一个奇怪的错误。我有一个.Rprofile

.First <- function(){
    if(R.version[["major"]] == "3"){
        if(R.version[["minor"]] == "4.2"){
            #.libPaths = .libPaths("~/Scratch/3.4.2-lib")
            .libPaths = .libPaths("/gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs/")
        }else if(R.version[["minor"]] == "3.0"){
            .libPaths = .libPaths("~/.R/3.3.0-lib")

        }else if(R.version[["minor"]] == "2.3"){
            .libPaths = .libPaths("~/.R/3.2.3-lib")

        }else if(R.version[["minor"]] == "5.0"){
            .libPaths = .libPaths("~/.R/3.5.0-lib")

        }else{
            write("ERROR!! Something got messed up in ~/.Rprofile -> .First()",stderr())
            q(save = "no", status = 1, runLast = FALSE)
        }
    }else{
        write("ERROR!! No libraries built for R versions other than 3.X.X",stderr())
        q(save = "no", status = 1, runLast = FALSE)
    }
    write(sprintf("Looking for libraries in : %s",.libPaths()), stdout())
}

在CentOS 6.9上使用R-3.4.2,我尝试安装包:

qmaster02: dependencies$ R

R version 3.4.2 (2017-09-28) -- "Short Summer"
.
. 
.

Looking for libraries in : /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs
Looking for libraries in : /gpfs0/export/opt/R/3.4.2/lib64/R/library
> install.packages("wordcloud")
Installing package into ‘/gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs’
(as ‘lib’ is unspecified)
--- Please select a CRAN mirror for use in this session ---
also installing the dependencies ‘RColorBrewer’, ‘Rcpp’

trying URL 'https://cran.mtu.edu/src/contrib/RColorBrewer_1.1-2.tar.gz'
Content type 'application/x-gzip' length 11532 bytes (11 KB)
==================================================
downloaded 11 KB

trying URL 'https://cran.mtu.edu/src/contrib/Rcpp_1.0.0.tar.gz'
Content type 'application/x-gzip' length 3635277 bytes (3.5 MB)
==================================================
downloaded 3.5 MB

trying URL 'https://cran.mtu.edu/src/contrib/wordcloud_2.6.tar.gz'
Content type 'application/x-gzip' length 42454 bytes (41 KB)
==================================================
downloaded 41 KB

Looking for libraries in : /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs
Looking for libraries in : /gpfs0/export/opt/R/3.4.2/lib64/R/library
* installing *source* package ‘RColorBrewer’ ...
** package ‘RColorBrewer’ successfully unpacked and MD5 sums checked
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
Looking for libraries in : /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs
Looking for libraries in : /gpfs0/export/opt/R/3.4.2/lib64/R/library
* DONE (RColorBrewer)
Looking for libraries in : /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs
Looking for libraries in : /gpfs0/export/opt/R/3.4.2/lib64/R/library
* installing *source* package ‘Rcpp’ ...
** package ‘Rcpp’ successfully unpacked and MD5 sums checked
** libs
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG -I../inst/include/  -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c Date.cpp -o Date.o
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG -I../inst/include/  -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c Module.cpp -o Module.o
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG -I../inst/include/  -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c Rcpp_init.cpp -o Rcpp_init.o
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG -I../inst/include/  -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c api.cpp -o api.o
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG -I../inst/include/  -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c attributes.cpp -o attributes.o
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG -I../inst/include/  -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c barrier.cpp -o barrier.o
g++ -shared -L/opt/R/3.4.2/lib64/R/lib -L/opt/zlib/1.2.11/ -L/opt/bzip2/1.0.6/lib/ -L/opt/xz/5.2.3/lib -L/opt/pcre/8.38/lib -L/opt/curl/7.47.1/lib/ -o Rcpp.so Date.o Module.o Rcpp_init.o api.o attributes.o barrier.o -L/opt/R/3.4.2/lib64/R/lib -lR
installing to /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs/Rcpp/libs
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
Looking for libraries in : /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs
Looking for libraries in : /gpfs0/export/opt/R/3.4.2/lib64/R/library
* DONE (Rcpp)
Looking for libraries in : /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs
Looking for libraries in : /gpfs0/export/opt/R/3.4.2/lib64/R/library
* installing *source* package ‘wordcloud’ ...
** package ‘wordcloud’ successfully unpacked and MD5 sums checked
** libs
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG  -I"/gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs/Rcpp/include" -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c RcppExports.cpp -o RcppExports.o
g++  -I/opt/R/3.4.2/lib64/R/include -DNDEBUG  -I"/gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs/Rcpp/include" -I/opt/zlib/1.2.11/include -I/opt/bzip2/1.0.6/include/ -I/opt/xz/5.2.3/include -I/opt/pcre/8.38/include -I/opt/curl/7.47.1/include   -fpic  -g -O2  -c layout.cpp -o layout.o
g++ -shared -L/opt/R/3.4.2/lib64/R/lib -L/opt/zlib/1.2.11/ -L/opt/bzip2/1.0.6/lib/ -L/opt/xz/5.2.3/lib -L/opt/pcre/8.38/lib -L/opt/curl/7.47.1/lib/ -o wordcloud.so RcppExports.o layout.o Looking for libraries in : /gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs Looking for libraries in : /gpfs0/export/opt/R/3.4.2/lib64/R/library -L/opt/R/3.4.2/lib64/R/lib -lR
g++: error: Looking: No such file or directory
g++: error: for: No such file or directory
g++: error: libraries: No such file or directory
g++: error: in: No such file or directory
g++: error: :: No such file or directory
g++: error: Looking: No such file or directory
g++: error: for: No such file or directory
g++: error: libraries: No such file or directory
g++: error: in: No such file or directory
g++: error: :: No such file or directory
make: *** [wordcloud.so] Error 1
ERROR: compilation failed for package ‘wordcloud’
* removing ‘/gpfs0/home/user/Scratch/dependencies/R-3.4.2_libs/wordcloud’
Warning in install.packages("wordcloud") :
  installation of package ‘wordcloud’ had non-zero exit status

The downloaded source packages are in
    ‘/tmp/RtmpACcxZ9/downloaded_packages’

使用最后几个编译行,您可以看到R已决定尝试将字符串Looking for libraries in ...链接为单独的目标文件。这非常令人困惑。

防止这种情况发生的方法是在.Rprofile中注释掉写入行,但是当你需要安装软件包时这很烦人。

问题:为什么R这样做,为什么它只发生在wordcloud包装上?

r
1个回答
1
投票

这是因为this (very old!!) line中的Makevars

PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`

在编写时,需要从Rcpp获取Rcpp的链接指令。但自2013年以来,不再需要这个,并且可以删除该行。随意向Ian提交错误报告。

也就是说,你的系统也很脆弱。您不应该从初始化文件打印,或者至少在您检测到非交互模式时不打印。使用类似的东西

if (interactive()) { ... }

保护输出一代。

© www.soinside.com 2019 - 2024. All rights reserved.