在r的素食主义者中保存圣职任命对象

时间:2012-09-19 16:32:08

标签: r save vegan

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

我所指的受戒对象类型示例:

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

2 个答案:

答案 0 :(得分:2)

@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

答案 1 :(得分:1)

如果要使用相同的随机数,则需要设置随机数种子。例如,

##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