共享R代码的不兼容性

时间:2017-11-26 19:07:03

标签: r collaboration

我在与协作者共享R代码时遇到了困难,我想知道如何解决这个问题。我的代码将为我正常运行,但不会为我的协作者运行,反之亦然。我保持R / Rstudio和我的包最新。

我的合作者在他们的电脑上使用R,而我在我的Mac上使用Rstudio。 R / Rstudio之间是否存在任何已知的不兼容性或在Mac和PC之间共享R代码?

我的一个假设是,这可能是由旧版本的软件包引起的。我知道我的合作者让R保持最新状态,但我不确定他们如何管理他们的包裹。

例如我使用tidyverse进行数据操作,看起来这对他们来说尤其是个问题。

成功分享代码的最佳方法是什么?有人最近建议不要使用“库”来加载我可能会使用“require”修复我的问题的包。

1 个答案:

答案 0 :(得分:2)

为确保两台计算机在相同版本级别具有相同的软件包,可以使用Chris Eberwein发布到Data Science Riot的文章How to Upgrade R Without Losing Your Packages中描述的过程。我正在重新发布非Bioconductor步骤,以便人们可以在SO上看到这里的步骤。

首先,将当前安装的软件包列表保存到.rda文件。

   tmp <- installed.packages()
   installedpkgs <- as.vector(tmp[is.na(tmp[,"Priority"]), 1])
   save(installedpkgs, file="installed_old.rda")

其次,安装最新版本的R.

第三,重新加载旧包并更新。

tmp <- installed.packages()
installedpkgs.new <- as.vector(tmp[is.na(tmp[,"Priority"]), 1])
missing <- setdiff(installedpkgs, installedpkgs.new)
install.packages(missing)
update.packages()

要重新安装Bioconductor软件包,请阅读上面链接的URL上的文章。

确认在多台计算机上安装所有软件包的相同版本的一种方法是使用sessionInfo()函数并比较每台计算机的输出。

> library(tidyverse)
── Attaching packages ────────────────────────────────────────────── tidyverse 1.2.1 ──
✔ ggplot2 2.2.1     ✔ purrr   0.2.4
✔ tibble  1.3.4     ✔ dplyr   0.7.4
✔ tidyr   0.7.2     ✔ stringr 1.2.0
✔ readr   1.1.1     ✔ forcats 0.2.0
── Conflicts ───────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
> sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.1

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] forcats_0.2.0   stringr_1.2.0   dplyr_0.7.4     purrr_0.2.4     readr_1.1.1    
[6] tidyr_0.7.2     tibble_1.3.4    ggplot2_2.2.1   tidyverse_1.2.1

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.14          cellranger_1.1.0      compiler_3.4.2       
 [4] plyr_1.8.4            bindr_0.1             tools_3.4.2          
 [7] lubridate_1.7.1       jsonlite_1.5          nlme_3.1-131         
 [10] gtable_0.2.0          lattice_0.20-35       pkgconfig_2.0.1      
 [13] rlang_0.1.4           psych_1.7.8           cli_1.0.0            
 [16] rstudioapi_0.7.0-9000 parallel_3.4.2        haven_1.1.0          
 [19] bindrcpp_0.2          xml2_1.1.1            httr_1.3.1           
 [22] hms_0.4.0             grid_3.4.2            glue_1.2.0           
 [25] R6_2.2.2              readxl_1.0.0          foreign_0.8-69       
 [28] modelr_0.1.1          reshape2_1.4.2        magrittr_1.5         
 [31] scales_0.5.0          rvest_0.3.2           assertthat_0.2.0     
 [34] mnormt_1.5-5          colorspace_1.3-2      stringi_1.1.6        
 [37] lazyeval_0.2.1        munsell_0.4.3         broom_0.4.3          
 [40] crayon_1.3.4         
>