【问题标题】:Is R 4.0.x backward compatible with R 3.6.x?R 4.0.x 是否向后兼容 R 3.6.x?
【发布时间】:2021-03-02 08:22:09
【问题描述】:

我继承了一个在 R 3.6.1 中开发和调试的项目。我是否应该期望它可以在 R 4.0.x(当前最新版本是 4.0.3)上运行?

【问题讨论】:

    标签: r backwards-compatibility


    【解决方案1】:

    是的。

    R 几乎总是如此,无一例外。

    最近的一个小问题(相对于早期版本影响 3.6.0)与统一随机数生成器的一个小问题修复有关,使之前生成的序列(也用于采样)与当前生成的序列不同,但即使这样也很好发出信号。请参阅文件 NEWS.RdNEWS.3.RdNEWS.2.RdNEWS.1NEWS.0,了解非常仔细、非常明确的更改列表。

    最重要的是,您甚至不必相信我的话。您可以将 R 4.0.* 作为 Docker 容器安装并尝试您的代码并说服自己。

    编辑:我碰巧为 Debian 和 Docker 维护 R,所以我在这里有几个版本的容器。看看下面绘制三个 N(0,1) 数字的代码如何在四个不同年份的 R 中得到相同的结果。如果我在这里有更多容器或更旧的 R,我可以展示更多。

    edd@rob:~$ docker run --rm -ti r-base:3.3.1 Rscript -e 'set.seed(42); rnorm(3)'
    [1]  1.3709584 -0.5646982  0.3631284
    edd@rob:~$ docker run --rm -ti r-base:3.4.4 Rscript -e 'set.seed(42); rnorm(3)'
    [1]  1.3709584 -0.5646982  0.3631284
    edd@rob:~$ docker run --rm -ti r-base:3.5.3 Rscript -e 'set.seed(42); rnorm(3)'
    [1]  1.3709584 -0.5646982  0.3631284
    edd@rob:~$ docker run --rm -ti r-base:3.6.3 Rscript -e 'set.seed(42); rnorm(3)'
    [1]  1.3709584 -0.5646982  0.3631284
    edd@rob:~$ docker run --rm -ti r-base:4.0.3 Rscript -e 'set.seed(42); rnorm(3)'
    [1]  1.3709584 -0.5646982  0.3631284
    edd@rob:~$ 
    

    【讨论】:

    • 最大的变化可能是 read.table 等中的 stringsAsFactors
    • 只是一个简单的问题。是否可以使用 Mersenne Twister RGN 和相同的种子在 C++ 和 R 中生成完全相同的数字?
    • 是的!甚至我提到的警告也只影响了统一的生成器。请参阅我现在发布的示例。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2020-07-31
    相关资源
    最近更新 更多