8

ワークスペースで作業するというアイデアが気に入っています。これまでのところ、私は常にワークスペース全体を保存し、既存のプロジェクトに完全にロードしていました。しかし、多くの場合、指定されたワークスペースから単一のオブジェクトのみが必要です。それらを別のワークスペースから別々にロードする可能性はありますか?

また、既存のワークスペースにオブジェクトを追加すると便利な場合もあります。たとえば、別々に巨大なワークスペースを持つ 5 つの巨大なスクリプトがあり、それらを混同して 1 つのワークスペースにまとめたくないとします。ここで、5 つのワークスペースのそれぞれからのクリーンな結果のみを別のクリーンなワークスペースに保存する必要があります...

したがって、これらは基本的なタスクです。

# save entire workspace
save.image("mypath/myworkspace")

# load entire workspace
load ("mypath/myworkspace")

# save a single object (or several)
save (myobject,file="mypath/myworkspace")

# load a single object from an existing workspace
?

# add a single object to an existing workspace
?
4

2 に答える 2

14

RStudio はあなたglobalenv()の「ワークスペース」を呼び出します

.RData ファイルを自分の環境以外の環境にロードできます。globalenv()

x <- 1; y <- 2 #First, create some objects
save.image()  # save workspace to disk
rm(list=ls()) # remove everything from workspace
tmp.env <- new.env() # create a temporary environment
load(".RData", envir=tmp.env) # load workspace into temporary environment
x <- get("x", pos=tmp.env) # get the objects you need into your globalenv()
#x <- tmp.env$x # equivalent to previous line
rm(tmp.env) # remove the temporary environment to free up memory

オブジェクトがglobalenv()に追加されると、RStudio の [ワークスペース] タブに表示されます。

同様に、オブジェクトを環境に割り当てることができます。

tmp.env <- new.env()
load(".RData", envir=tmp.env) # load workspace into temporary environment
assign("z", 10, pos=tmp.env)
#tmp.env$z <- 10 # equivalent to previous line

tmp.envこれで、オブジェクトがどこにあるかがわかれば、すべてのオブジェクトを保存できますsave

save(list=ls(all.names=TRUE, pos=tmp.env), envir=tmp.env, file="test.RData")
rm(tmp.env)

ztest.RData に格納されているワークスペースにオブジェクト を効果的に追加しました。

rm(list=ls(all.names=TRUE))
load("test.RData")

> ls()
[1] "x"       "y"       "z"  
于 2013-03-18T21:42:35.337 に答える
2

# load a single object from an existing workspace

ワークスペースから 1 つのオブジェクトを復元することはできません。のためsave.image(".Rdata")の単純化されたコマンドであるためsave(list = ls(all=TRUE), file= ".RData")。コマンドを使用するloadと、そのリストからすべてのオブジェクトが復元されます。

ただし、いくつかのオブジェクトをリストにマージして保存し、それらをロードすることはできます。例えば:

library(ggplot2)
c <- ggplot(mtcars, aes(factor(cyl)))
d<-c + geom_bar(width=.5)  # create two graphs 
c<- c + geom_bar()
save(list=c("c","d"),file="myobjects") # save them (notice that objects are accessed as strings)
rm(list = ls()) # remove from the memory
load(file="myobjects") # load again

これで、オブジェクト (プロット) c と d が戻ってきました。それはあなたの最後の質問に答えます。

ここで、すでにオブジェクトcdファイルmyobjectsがあり、このファイルにさらにオブジェクトを追加したいとします。データは圧縮されsaveて保存されるため、ロードしないと不可能です ( tar パッケージを取得し、圧縮方法を選択する場合)。ご存じのように、既にアーカイブされたファイルを解凍せずにデータを追加することはできません。私が見る唯一の解決策はこれです。に と を追加したいとします。saveRDSsavesaveRDSabmyobjects

library(ggplot2)
a<-qplot(rnorm(100))
b<-qplot(rnorm(200))
list=ls()
list<-list[-which(list%in%c("a","b"))] # list all variables except the one you want to save
rm(list=list) # we're deleting all except a and b
load(file="myobjects") # loading or unpacking objects c and d
save(list=ls(),file="myobjects") # saving objects a,b,c,d in myobjects file

これは大まかな回避策ですが、考えてみると、R ではデータまたはプロット オブジェクトのいずれかを取得しました (理由から ggplot2 の例を使用しました)。データは として保存できsave.table、プロットはグロブのリスト (パッケージgridExtra) に保存してから で保存できますsave

于 2013-03-15T14:42:01.790 に答える