【问题标题】:Saving ordination object in vegan in r在 r 的 vegan 中保存排序对象
【发布时间】:2012-09-12 00:23:20
【问题描述】:

如何保存 MDS 对象以供下一次 R 会话使用?因为 metaMDS() 函数使用了多次随机重启,所以每次都会产生略有不同的答案。我需要输出在 R 的多个会话中保持一致。我怎样才能做到这一点?谢谢

我所指的排序对象类型的示例:

data(dune)
sol <- metaMDS(dune)
sol

【问题讨论】:

    标签: r save vegan


    【解决方案1】:

    @csgillespie 展示了如何使metaMDS() 的结果可重现。在您使用metaMDS() 或在 R 或其他软件中使用伪随机数生成器的任何其他函数时,应始终设置伪随机数生成器种子,否则您将无法重现结果。

    但是,某些metaMDS() 拟合可能需要大量计算时间,因此将结果对象序列化到磁盘是一种选择。为此,您需要 save()saveRDS()。两者的区别在于前者 (save()) 保存了包括其名称在内的整个对象。 saveRDS() 只序列化对象本身,而不是当前会话中的对象名称。

    load()可以用来恢复save()保存的对象。它将对象加载到当前会话中,并将覆盖具有相同名称的对象。 readRDS()用于加载saveRDS()序列化的对象。

    require("vegan")
    ## The recommended way of running NMDS (Minchin 1987)
    ##
    data(dune)
    ## Global NMDS using monoMDS
    ## set the seed
    set.seed(1)
    sol <- metaMDS(dune)
    
    save(sol, file = "my_sol.rda")
    ls()
    rm(sol)
    load("my_sol.rda")
    ls()
    
    saveRDS(sol, file = "my_sol.rds")
    ls()
    sol2 <- readRDS("my_sol.rds")
    ls()
    all.equal(sol, sol2)
    

    一些相关的输出是:

    >     save(sol, file = "my_sol.rda")
    >     ls()
    [1] "dune" "sol" 
    >     rm(sol)
    >     load("my_sol.rda")
    >     ls()
    [1] "dune" "sol" 
    > 
    >     saveRDS(sol, file = "my_sol.rds")
    >     ls()
    [1] "dune" "sol" 
    >     sol2 <- readRDS("my_sol.rds")
    >     ls()
    [1] "dune" "sol"  "sol2"
    >     all.equal(sol, sol2)
    [1] TRUE
    

    【讨论】:

    • 非常感谢您的课程和解决方案!
    【解决方案2】:

    当你想使用相同的随机数时,你需要设置随机数种子。例如,

    ##For some positive number
    R> set.seed(1)
    R> runif(1)
    [1] 0.2655
    R> set.seed(1)
    R> runif(1)
    [1] 0.2655
    

    在您的示例中,只需在函数调用之前使用set.seed

    【讨论】:

    • 因此,即使我关闭 R 并且在下次打开 .R 脚本并运行该脚本时不保存我的工作区,它仍然会使用相同的随机数。此外,每次运行 metaMDS 时都会有几次随机重启,因此使用 set.seed 确保函数内的每次随机重启都是相同的?
    • @Elizabeth:您似乎误以为计算机会生成随机数。这是一位著名数学家(可能是冯·诺依曼)的名言,他说试图为此目的使用计算机的人处于“数字犯罪状态”。
    猜你喜欢
    • 2020-07-04
    • 2020-03-16
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多