【问题标题】:Incompatibilities sharing R code共享 R 代码的不兼容性
【发布时间】:2023-03-11 16:03:01
【问题描述】:

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

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

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

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

成功共享代码的最佳方式是什么?最近有人建议不要使用“library”来加载包,而是使用“require”来解决我的问题。

【问题讨论】:

  • R 是一种编程语言。您的合作者在他们的 PC 上使用什么 IDE for R?如果你们都让 R 保持最新,那么你们的代码应该可以打开并运行得很好。否则你们中的一个人是错误的(或撒谎)。
  • R 的行为在 OS X 和 Windows 之间存在细微差别,例如在 Windows 上的 download.files() 和 OS X 上的 method="curl" 中需要使用 method="wininet"。一般来说,但是,在两个操作系统上安装在相同版本级别的给定软件包将表现相同并产生相同的结果。我在 OS X、Windows 和 Ubuntu Linux 上安装了 R,当将当前版本级别的软件包应用于每个操作系统时,它们都会产生相同的结果。
  • 最好的方法可能是使用 docker,这样你们就在同一个镜像构建上运行。但是请忽略建议使用“require”而不是“library”的人。它几乎总是做错事:yihui.name/en/2014/07/library-vs-require

标签: r collaboration


【解决方案1】:

为确保两台机器具有相同版本级别的相同软件包,可以使用 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         
> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2017-11-21
    相关资源
    最近更新 更多