在 Linux 上 安装 R/RStudio Server 及 R 包

· 7193字 · 15分钟

重新整理了一篇在 Linux 环境中安装 R/RStudio Server 及 R 包,使用 R 连接数据库的笔记。

上个月在服务器上跑模型的时候一不小心把内存占满了,还好没产生什么别的影响。但因祸得福,这件事使好领导想起来有台配置更好的服务器可以给我用。本来好领导打算自己动手帮忙装 R 的,不过我坚持要练练手,于是好领导给我配了一个没有 root 权限的账号让我自己折腾去。因为之前在其他服务器上装 R/RStudio Server 及 R 包都有记笔记,这次想顺便整理一个完整版。不过由于缺乏一些基础常识,断断续续折腾了两三天把 R/RStudio Server 和一些 R 包都装到了 home 目录下……由于装 xgboost 和 glmnet 包都需要升级 gcc,这一步我没成功,后来还是好领导替我换了个目录重新装了 R、升级 gcc 以及装了那两个包。

正式开始前,先了解下环境信息,登录服务器,执行uname -acat /proc/version等查看 Linux 版本。

  • 基本环境:Linux version 3.10.0-1062.el7.x86_64(gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) )

  • 安装条件:离线安装。服务器有防火墙,不能联外网,也需要申请具体端口访问权限,所以这篇笔记里没有任何与设置防火墙相关的内容。

  • 默认规则:服务器上的 home 目录相当于 windows 系统的 c 盘,一般不要把软件装在 home 目录下

本次安装时,由于缺乏经验,下文中各种文件目录被弄得不够统一、较复杂,于是正文中每次涉及文件目录时都会不厌其烦地详细叨一遍。

1.安装 R 🔗

CRAN 上下载最新的 R 源码文件压缩包(R-4.2.2.tar.gz),传到服务器上。

1.1.基本步骤 🔗

以下仅仅只是编译安装 R 的基本步骤,一般都会在编译那一步报很多错,踩不少坑。若是想要一次编译成功,且对后续装 R 包没影响,需要把后两个小节中显性坑、隐性坑里提到的 Linux 包都在编译之前装好。但是不同环境会导致报的错不同,离线安装还是需要做好趟坑的心理准备。

#! 切换到压缩包所在目录
cd /home/model/R/

#! 解压,完成后会生成一个新的 R-4.2.2文件夹,里面就是解压后的文件
tar -zxvf R-4.2.2.tar.gz

#! 切换到 R-4.2.2文件夹下面
cd R-4.2.2/

#! 编译,指定安装目录
./configure --prefix='/home/model/R/R-4.2.2/' --enable-R-shlib=yes --with-readline=yes  --with-libpng=yes --with-x=yes --with-blas --with-tcltk --with-pcre1

#! 安装
make
make install

需要说明的是:

  • --enable-R-shlib=yes表示生成 libR.so 库,不加这段的话后面装 Rstudio-server 会缺少 libR.so,会报错“R shared library (…/R-4.0.3/lib64/R/lib/libR.so) not found. If this is a custom build of R, was it built with the –enable-R-shlib option?”。

  • 编译代码后面跟的一长串,是笔者装了好几次 R 和 RStudio Server 后,试错试出来的。换个新的服务器重新再装一次的话,还是会因为环境变了而出现新的问题。这里有一篇文章列举了在编译步骤之前应先安装的必备包,以后再有机会的话倒是可以试试看,看看是不是可以一口气跳过所有坑。

1.2.显性坑(编译失败) 🔗

若编译时报错,大多是因为服务器系统环境中没有安装某些 Linux 包,需要根据报错信息一一安装。

configure: error: –with-readline=yes (default) and headers/libs are not available

sudo yum install readline-devel

configure: error: –with-x=yes (default) and X11 headers/libs are not available

sudo yum install libXt-devel

configure: error: zlib library and headers are required

sudo yum install zlib-devel

configure: error: bzip2 library and headers are required

sudo yum install bzip2-devel

configure: error: “liblzma library and headers are required”

sudo yum install lzma xz-devel

configure: error: PCRE2 library and headers are required, or use –with-pcre1 and PCRE >= 8.32 with UTF-8 support

上次在别的服务器上装 R 时,缺少 PCRE2 只需要执行sudo yum install pcre2-devel libcurl-devel即可。但是刚好新服务器上没有 pcre2-devel,于是摸索着做了以下尝试。

继续执行之前的编译代码,没有报错,于是继续安装直至完成。安装好以后,执行cd /home/model/R/R-4.2.2/bin/到对应目录下,再执行./R运行 R,验证 R 是否正常安装成功。

1.3.隐性坑(重新编译 R) 🔗

在之前编译完成后会出现下面这段,可能会提示出一些隐藏的坑。

    1. Capabilities skipped: PNG, JPEG, TIFF, cairo, ICU 表示在 Linux 上使用 R 时不支持绘制这些图形形式,将来用 ggplot2 以及依赖 ggplot2 的包绘图会报错。
    1. C++14 compiler 后面是空的,表示系统环境暂不支持 C++14,将来装 xgboost、glmnet 包时会报错。
    1. 没有提示缺少 Java 开发工具包(JDK),将来装 rJava、RJDBC 包时会报错。
R is now configured for x86_64-pc-linux-gnu

  Source directory:            .
  Installation directory:      /home/model/R/R-4.2.2

  C compiler:                  gcc -std=gnu11  -g -O2
  Fortran fixed-form compiler: gfortran  -g -O2

  Default C++ compiler:        g++ -std=gnu++11  -g -O2
  C++11 compiler:              g++ -std=gnu++11  -g -O2
  C++14 compiler:                 
  C++17 compiler:                 
  C++20 compiler:                 
  Fortran free-form compiler:  gfortran  -g -O2
  Obj-C compiler:	        

  Interfaces supported:        X11
  External libraries:          pcre2, readline, curl
  Additional capabilities:     NLS
  Options enabled:             shared R library, shared BLAS, R profiling

  Capabilities skipped:        PNG, JPEG, TIFF, cairo, ICU
  Options not enabled:         memory profiling

  Recommended packages:        yes

configure: WARNING: you cannot build info or HTML versions of the R manuals
configure: WARNING: you cannot build PDF versions of the R manuals
configure: WARNING: you cannot build PDF versions of vignettes and help pages

打开 R,在 R 中输入capabilities()可以得到下面这段,也是说明缺少一些支持。

>capabilities()
       jpeg         png        tiff       tcltk         X11        aqua 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
   http/ftp     sockets      libxml        fifo      cledit       iconv 
       TRUE        TRUE       FALSE        TRUE        TRUE        TRUE 
        NLS       Rprof     profmem       cairo         ICU long.double 
       TRUE        TRUE       FALSE       FALSE       FALSE        TRUE 
    libcurl 
       TRUE 

由于是系统环境问题,需要重新编译 R ,在此之前先安装一些相关的包,如下。

sudo yum install libpng libpng-devel libtiff libtiff-devel libjpeg-turbo libjpeg-turbo-devel cairo cairo-devel libicu-devel

如果Linux 环境中没有安装 libicu-devel,后面在 R 中安装 stringi 包时会报错,依赖 stringi 的包都会安装失败。

如果 Linux 环境中没有安装 cairo,后面在 R 中可能会无法安装 Cairo 包,依赖 ggplot2 的 scorecard 包绘图时会报错。

如果需要支持 C++14编译器或更高版本,此时需要升级 gcc。

重新编译的步骤和第1.1小节中的基本步骤是一样的。为了避免混淆,在别的目录下再次解压 R-4.2.2.tar.gz,但是编译代码可以不用改,因为重新编译可以覆盖之前的,继续把 R 安装到之前的目录下面即可。编译完成后会看到“ Additional capabilities: PNG, JPEG, TIFF, NLS, cairo, ICU”,接着继续执行 make && make install 即可。

2.安装 Rstudio Server 🔗

上官网下载 Rstudio Server的 rpm 文件,上传到服务器。

#! 安装 RStudio Server
sudo yum localinstall rstudio-server-rhel-1.4.1717-x86_64.rpm

#! 查看端口有无被占用
netstat -nat|grep 8888

:'
#添加跟端口配置相关的文件
#修改文件:vi
#文件中插入内容:按I键
#保存并退出: 按下Esc键 +  :wq
#不保存退出: 按下Esc键 + :q!
'
sudo vi /etc/rstudio/rserver.conf 

:'
#! 在 rserver.conf 文件中增加下面两行
第一行指定 R 程序所在位置
第二行指定端口号
'
rsession-which-r=/home/model/R/R-4.2.2/bin/R  
www-port=8888 

#! 检查配置是否完整
sudo rstudio-server verify-installation

#! 启动服务
sudo rstudio-server start

#! 查看状态,当出现 active(激活) 时,配置完成
sudo rstudio-server status

#! 重启服务
sudo rstudio-server restart

#! 关闭服务
sudo rstudio-server stop

启动服务后,在浏览器地址中输入IP:8888就会看到 RStudio Server 的登录界面,账户密码就是登录服务器的账户密码。

在检查配置是否完整时,报了下面的错,可能是因为没有配置 rsession.conf 文件,但是并不影响使用,可以忽略。

TTY detected. Printing informational message about logging configuration. Logging configuration loaded from ‘/etc/rstudio/logging.conf’. Logging to ‘/var/log/rstudio/rstudio-server/rserver.log’.

/usr/lib/rstudio-server/bin/rsession: error while loading shared libraries: libR.so: cannot open shared object file: No such file or directory

3.安装 R 包 🔗

本次仅安装以下 R 包:

  • markdown/rmarkdown
  • Cairo:用于部分图形输出
  • DBI/rJava/RJDBC:用于连接 Oracle、hive 等数据库
  • data.table:数据处理
  • echarts4r:绘制图形
  • DT:绘制表格
  • scorecard/bigstep/glmnet:计算 IV 值、分箱、绘制 ROC/K-S 曲线、逐步回归、交叉验证等
  • xgboost:训练 XGBoost 模型

在安装以上 R 包时,也会顺带装好一系列依赖包,比如 stringi、stringr、dplyr、ggplot2、shiny 等。

3.1.基本步骤 🔗

由于服务器上不能联外网,所以和安装 R、RStudio Server 一样,也需要先在能联外网的本地下载好需要安装的 R 源码包,并把下载的一系列文件都传到服务器上。在本地下载各种包和依赖包的代码如下。

getPackages <- function(packs) {
  packages <- unlist(
    tools::package_dependencies(
      packs,
      available.packages(),
      which = c("Depends", "Imports", "LinkingTo"),
      recursive = TRUE
    )
  )
  packages <- union(packs, packages)
  packages
}

#这里写入需要下载的包的名字
myPackages <-
  c("evaluate", "highr", "knitr", "markdown", "rmarkdown", "tinytex","xfun")

# myPackages <-
#   c("Cairo","data.table","echarts4r","DT","scorecard","xgboost","openxlsx","DBI","rJava","RJDBC")

# myPackages <-
#   c("bigstep","glmnet","dplyr","ggplot2")

packages <- getPackages(myPackages)

# 指定下载下来的包的存放目录
download.packages(packages, destdir = "D:/R/installR", type = "source")

接下来准备一个批量安装 R 包的脚本文件 install_Rpkg.R,传到服务器上,存放路径是/home/model/R/R_scripts/install_Rpkg.R,而当前 R 程序所在路径是/home/model/R/R-4.2.2/bin/R,那么可执行下面两行代码调用 install_Rpkg.R 脚本来安装R包。在 Linux 环境下cd ..是返回上一级目录的意思,下面目录切换的有点麻烦,其实可以不这么麻烦的。

#!切换到 install_Rpkg.R 所在目录
cd /home/model/R/R_scripts/
#! 再切换目录执行 R 脚本,多个 R 包名称之间用空格隔开
../R-4.2.2/bin/Rscript install_Rpkg.R evaluate highr knitr markdown rmarkdown tinytex xfun

其中,install_Rpkg.R 中的内容如下。

library(tools)
myPackages = commandArgs(T)

if (length(myPackages) == 0) {
  cat("Usage: Rscript install_Rpkg.R package1 package2 package3 ...")
  cat("\n")
  quit("no")
}

# 填入 R 安装包在服务器上的路径
path <- "/home/model/installR/pkg"
write_PACKAGES(path, type = "source")
install.packages(myPackages,
                 contriburl = paste("file:", path, sep = ''),
                 type = "source")

以上是批量安装 R 包的方法,以下是单独安装 R 包的方法。

  • 方法一,继续调用 install_Rpkg.R,如下安装 cpp11 包。
#!切换到 install_Rpkg.R 所在目录
cd /home/model/R/R_scripts/
#! 再切换目录执行 R 脚本
../R-4.2.2/bin/Rscript install_Rpkg.R cpp11
  • 方法二,调用 R 程序,将 R 包安装到 R 的 library 目录下,如下安装 sodium 1.2.0。
#! 切换到 R 程序所在目录
cd /home/model/R/R-4.2.2/bin/
#!
./R CMD INSTALL -l /home/model/R-4.2.2/lib64/R/library /home/model/installR/pkg/sodium_1.2.0.tar.gz
  • 方法三,打开 RStudio Server,在 R 里面用 install.packages 函数安装 R 包,如下安装 sass 0.4.3。
install.packages("home/model/installR/pkg/sass_0.4.3.tar.gz", repos = NULL, type = "source")

3.2.安装 R 包踩的坑 🔗

安装过程中,如果出现 “had non-zero exit status” 错误或者版本对不上的错误,可以查一下包之间的依赖关系,可以试试版本低一点的包是否能正常安装。

安装 stringi 包 🔗

downloading the ICU data library (icudt)

trying URL ‘http://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip'

Error in download.file(paste(href, fname, sep = “”), icudtzipfname, mode = “wb”): cannot open URL ‘http://raw.githubusercontent.com/gagolews/stringi/master/src/icu69/data/icu4c-69_1-data-bin-l.zip'

icudt download failed.stringi cannot be built.Failed to download the ICU data library (icudt). Stopping now.

安装 stringi 包时报了上面的错,这是因为开发者默认安装这个包时要从镜像上下载 ICU 相关的包,于是离线安装时一定会报错。从https://github.com/gagolews/stringi/blob/master/INSTALL这里翻了翻,最终解决方法如下:

  • 1.根据报错信息下载 icu4c-69_1-data-bin-l.zip,和之前下载好的 stringi_1.7.8.tar.gz 放到同一路径下 /home/model/installR/pkg

  • 2.在已经安装好的 Rstudio Server 中执行以下代码。

install.packages("/home/model/installR/pkg/stringi_1.7.8.tar.gz", repos = NULL, type = "source",configure.vars="ICUDT_DIR=/home/model/installR/pkg")

安装 sass/bslib 包 🔗

安装 rmarkdown 包的时候报错,因为其依赖包 sass 和 bslib 安装失败。报的错误如下,大意是文件不完整。

Error in untar2(tarfile, files, list, exdir, restore_times) :incomplete block on file

原先安装失败的是 sass 0.4.4,在 CRAN 上重新下载sass 0.4.3后,重新安装成功了。同理,原先装 bslib 0.4.1失败,重新下载 bslib 0.4.0再安装也成功了。随后重新安装 rmarkdown 也正常了。

install.packages("home/model/installR/pkg/sass_0.4.3.tar.gz", repos = NULL, type = "source")
install.packages("home/model/installR/pkg/bslib_0.4.0.tar.gz", repos = NULL, type = "source")

安装 echarts4r 包 🔗

Warning: dependency cpp11 is not available
also installing the dependencies tidyr, httpuv, broom, shiny, corrplot

ERROR: dependency cpp11 is not available for package tidyr
* removing /home/model/R/R-4.2.2/lib64/R/library/tidyr
Error in untar2(tarfile, files, list, exdir, restore_times) : 
  incomplete block on file
Error in untar2(tarfile, files, list, exdir, restore_times) : 
  incomplete block on file
ERROR: dependency tidyr is not available for package broom
* removing /home/model/R/R-4.2.2/lib64/R/library/broom
ERROR: dependency httpuv is not available for package shiny
* removing /home/model/R/R-4.2.2/lib64/R/library/shiny
ERROR: dependencies broom, shiny, corrplot are not available for package echarts4r

这个错误里有好几条依赖关系。

  • 一是缺少 cpp11,于是依赖 cpp11 的 tidyr 安装失败,而依赖 tidyr 的 broom 也安装失败。上 CRAN 下载 cpp11重新安装,完成后依次安装 tidyr 、broom 即可。

  • 二是 httpuv 文件不完整,于是依赖 httpuv 的 shiny 安装失败。原先报错的是 httpuv1.6.6,于是上 CRAN 下载 httpuv1.6.5,重新安装成功。接着,shiny 也能正常安装完成。

  • 三是 echarts4r 直接依赖的 corrplot 安装失败,单独安装后发现报错原因也是文件不完整。原先报错的是 corrplot0.92,于是上 CRAN 下载 corrplot0.91,重新安装成功。

以上几个依赖包都安装完成后,echarts4r 就能安装成功了。

安装 rJava/RJDBC 包 🔗

configure: error: Java Development Kit (JDK) is missing or not registered in R

ERROR: configuration failed for package ‘rJava’

错误显示系统环境中缺少 Java 开发工具包(JDK),于是 rJava 安装失败,而依赖 rJava 的 RJDBC 也安装失败。系统环境的原因同样需要在装好新的 JDK 后重新编译R。参照网上搜的文章找找系统里有没有现成的文件可以直接装,没有的话需要去官网下载一个再安装。

sudo yum -y list java*
sudo yum install -y java-1.8.0-openjdk.x86_64
#!
java -version

安装 glmnet/xgboost 包 🔗

安装 glmnet 和 xgboost 时都报了一样的错,如下。

Error: C++14 standard requested but CXX14 is not defined

C++14 需要 gcc 6.1 以上才完全支持,所以需要暂时升级 gcc。如果不想影响系统环境的话,升级完 gcc、装好 R 包后还要还原回去。大体步骤是:升级gcc–->重新编译安装 R–->装 R 包–->还原 gcc。

如果有 root 权限的话,可以直接装到根目录下,下面的步骤可能好使。不然的话,在编译的步骤需要加上--prefix='/指定目录/'装到指定目录。

  • 1.从https://ftp.gnu.org/gnu/gcc/这里下载 gcc-6.1.0-tar.gz,打开后在\gcc-6.1.0 .tar.gz\gcc-6.1.0 .tar\gcc-6.1.0\contrib\路径下找到 download_prerequisites 文件,用文本编辑器打开这个文件,可以看到 gcc6.1.0 所需依赖包及对应版本。接着分别下载mpfr-2.4.2gmp-4.3.2mpc-0.8.1。最后将四个文件都传到服务器上。

  • 2.依次解压,编译安装 gcc。

#! cd 到存放压缩包的目录
cd /存放目录

#!依次解压到指定目录,依赖包需解压到 gcc-6.1.0文件夹下
tar -zvxf gcc-6.1.0.tar.gz --directory=/指定目录/
tar -xf gmp-4.3.2.tar.bz2 --directory=/指定目录/gcc-6.1.0/
tar -xf mpc-0.8.1.tar.gz --directory=/指定目录/gcc-6.1.0/
tar -xf mpfr-2.4.2.tar.bz2 --directory=/指定目录/gcc-6.1.0/

#! 切换目录
cd /指定目录/gcc-6.1.0

ln -sf gmp-4.3.2 gmp
ln -sf mpfr-2.4.2 mpfr 
ln -sf mpc-0.8.1 mpc

# 创建 build 目录
mkdir build && cd build

# 编译
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

# 执行安装(约2小时)
make && make install

# 查看 gcc 版本
gcc -v

4.使用 R 连接数据库 🔗

连接数据库之前,要做几项准备工作。

  • 1.需要确保 RJDBC 包安装成功,能正常加载。

  • 2.准备适配的 jar 包。一般使用 RJDBC 包连接数据库都会需要有 JDBC 驱动的 jar 包,下载下来后传到 R 的工作目录中。可在 RStudio Server 使用getwd()函数查看工作目录,使用setwd("")函数指定工作目录。

如果是连接 Oracle 数据库,需要找与数据库版本对应的 ojdbc 的 jar 包。

Oracle Database version JDBC specification compliance
19.x JDBC 4.3 in ojdbc10.jar/JDBC 4.2 in ojdbc8.jar
18.3 JDBC 4.2 in ojdbc8.jar
12.2 or 12cR2 JDBC 4.2 in ojdbc8.jar
12.1 or 12cR1 JDBC 4.1 in ojdbc7.jar/JDBC 4.0 in ojdbc6.jar
11.2 or 11gR2 JDBC 4.0 in ojdbc6.jar/JDBC 3.0 in ojdbc5.jar

如果是连接 Hive/Impala,登录服务器后输入$ hadoop version查看 Hadoop 版本,在弹出来的信息最下面一条就是 jar 包文件所在目录。

This command was run using /home/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/hadoop-common-3.0.0-cdh6.3.2.jar

  • 3.知晓数据库的 IP、端口号、账户、密码。

连接 Oracle 🔗

如果要导入的数据本身特别大,大到超过 Java 内存空间,会报错。在加载包之前运行条件options(java.parameters = "-Xmx1024m"),可改变数据能占用的 Java 内存空间大小,1024m 是1G。如果1024m(1G)不够的话,可以再改大点,比如改成8192m(8G)。

options(java.parameters = "-Xmx1024m")   
library(DBI)
library(rJava)
library(RJDBC)

drv <-
  JDBC("oracle.jdbc.driver.OracleDriver",
       "/工作目录/ojdbc6-11.2.0.1.0.jar")
       
conn <-
  dbConnect(drv,
            "jdbc:oracle:thin:@IP地址:端口:数据库名称",
            "账户名称",
            "密码")

# 举个例子,将表 temp_2022 导入 R 环境中
data = dbGetQuery(conn, "select * from temp_2022")

#相当于在数据库中执行 truncate table temp_2022;
#dbRemoveTable(conn, "temp_2022") 

#相当于把 R 环境中的 data 数据集写入数据库的 temp_2023 表中
#dbWriteTable(conn, "temp_2023", data, overwrite  = TRUE)

# 断开连接
dbDisconnect(conn)

连接 Impala 🔗

https://docs.cloudera.com/documentation/enterprise/5-12-x/topics/impala_jdbc.html#jdbc_connect__class_hive_driver这里翻到了使用 Hive JDBC 驱动时默认端口号是21050。

options(java.parameters = "-Xmx8192m")
library(DBI)
library(rJava)
library(RJDBC)

#使用 Hive JDBC 驱动
drv <-
  JDBC(
    "org.apache.hive.jdbc.HiveDriver",
    "/工作目录/hive-jdbc-2.1.1-cdh6.3.2-standalone.jar"
  ) #jar包所在目录

conn <-
  dbConnect(drv,
            "jdbc:hive2://IP:21050/;auth=noSasl", #填IP地址,端口号默认填21050
            "xxx", #账户名
            "XXX") #密码

# 导入数据
touch <- dbGetQuery(conn, "select * from kudu.temp_2022")  

dbDisconnect(conn) #断开连接

连接 Impala 时会报下面这个错,但是数据能正常导入,并不影响使用,所以忽略没管。

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property ‘org.apache.logging.log4j.simplelog.StatusLogger.level’ to TRACE to show Log4j2 internal initialization logging.

5.使用 R Markdown 及绘图 🔗

在 RStudio Server中新建一个 R Markdown 文档,直接载入 echarts4r、DT 包后画图画表都是正常的,点击 knit 生成的 html 文档里图表也都是正常显示的。但是使用 ggplot2,以及依赖 ggplot2 的 scorecard 包绘图时会报出如下错误。

Error in .External2(C_X11, paste0(“png::”, filename), g$width, g$height, :unable to start device PNG

不知道 C_X11 和 X11 是什么关系,前面 R 编译完成后确实仅显示 Interfaces supported:X11,可能又是系统环境里缺乏些什么支持,需要装一些系统包然后重新编译 R 才管用,总之是一个没趟平的隐形坑。

现阶段的解决办法是,编译 R 之前执行sudo yum install cairo-devel,装好 R 后,在 R 里安装 Cairo 包。

  • 如果是想要 knit 生成的 html 文档里显示图形,需要在 R Markdown 文档的 setup 代码段里加上dev = "CairoPNG"参数。
```{r setup, include=TRUE,dev="CairoPNG"}
knitr::opts_chunk$set(echo = TRUE,dev="CairoPNG")
```
  • 如果是想要在绘图过程中查看图片,需要在画图的代码前后加上下面这段,将绘制的图形保存成图片,通过打开图片来查看图形。
library(Cairo)
Cairo(
  file = "Cairo_PNG_train_dpi.png", #生成图片的名字
  type = "png", # 生成图片的格式
  width = 1200, # 设置图片的宽度和高度
  height = 800)

# 画图的代码
dev.off()
R