2012-06-10 12 views
5

私はsave()をRで上書きしようとしています。そのため、オブジェクトを保存する前に見つからないディレクトリが作成されます。私は、省略記号法を使用してオブジェクトを別の関数に渡すのに問題があります。入れ子関数でオブジェクトを渡す方法は?

私の例:

save <- function(...,file){ #Overridden save() 
    target.dir <- dirname(file) #Extract the target directory 
    if(!file.exists(target.dir)) { 
     #Create the target directory if it doesn't exist. 
     dir.create(target.dir,showWarnings=T,recursive=T) 
    } 
    base::save(...,file=file.path(target.dir,basename(file))) 
} 

fun1 <- function(obj) { 
    obj1 <- obj + 1 
    save(obj1,file="~/test/obj.RData") 
} 

fun1(obj = 1) 

このエラーになり、上記のコード:

Error in base::save(..., file = file.path(target.dir, basename(file))) : 
object ‘obj1’ not found 

私はこの問題は、オブジェクトのOBJ1は '(保存私のカスタムの内側に存在しないことがあることを認識)関数を使っていますが、fun1からbase :: saveに渡す方法はまだ分かりません。

私が試してみました:

base::save(parent.frame()$...,file=file.path(target.dir,basename(file))) 

と:

base::save(list=list(...),file=file.path(target.dir,basename(file))) 

をなし成功を収めて。

提案がありますか?あなたは、親の環境を指定するには、「ベース::救う」必要

+0

修正base.name上記のコードでベース名します。 Matthewに感謝します。 –

答えて

7

save <- function(...,file){ #Overridden save() 
    target.dir <- dirname(file) #Extract the target directory 
    if(!file.exists(target.dir)) { 
    #Create the target directory if it doesn't exist. 
    dir.create(target.dir,showWarnings=T,recursive=T) 
    } 
    base::save(...,file=file.path(target.dir,basename(file)),envir=parent.frame()) 
} 

注パラメータがベースに追加::コールを保存します。

fun1 <- function(obj) { 
    obj1 <- obj + 1 
    save(obj1,file="~/test/obj.RData") 
} 

また、使用 '=' パラメータ名を指定する:

fun1(obj = 1) 
+0

優秀!どうもありがとう! –

関連する問題