0

R の次のセッションで使用するために MDS オブジェクトを保存するにはどうすればよいですか? metaMDS() 関数はいくつかのランダムな再起動を使用するため、毎回わずかに異なる結果が生成されます。R の複数のセッションで一貫した出力が必要です。どうすればこれを達成できますか? ありがとうございました

私が参照しているオーディネーション オブジェクトのタイプの例:

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

2 に答える 2

2

@csgillespie は、metaMDS()再現可能な結果を​​作成する方法を示しました。疑似乱数ジェネレーターシードのこの設定は、metaMDS()R または他のソフトウェアで疑似乱数ジェネレーターを使用する他の関数を使用するたびに行う必要があります。そうしないと、結果を再現できなくなります。

ただし、metaMDS()フィットによっては計算に時間がかかる場合があるため、結果オブジェクトをディスクにシリアル化することもできます。そのために、save()またはsaveRDS(). 2 つの違いは、前者 ( 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
于 2012-09-19T20:36:34.707 に答える
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、関数呼び出しの前に使用してください。

于 2012-09-19T16:33:16.493 に答える