2016-10-13 13 views
-1

関数の仮引数としてディレクトリ名を渡したいとします。関数の中で、作業ディレクトリを正式な引数で述べたディレクトリに変更したい。 ディレクトリは現在自分の作業ディレクトリ内にあります。関数内の作業ディレクトリを変更する

注:

specdataが私の現在のWD

コード内のディレクトリです:これは動作していないことのようです

x <-function(directory) 
{ 
y<-file.path(getwd(),directory) 
setwd(y) 
} 

x(specdata) 

、私は関数argument.Itとして"specdata"を入力する必要はありません必要がありますnot be in double quotes

+3

です'x(" specdata ")'の使用に反対する?引用符を使用すると、引用符なしでソリューションをコーディングするより簡単なソリューションになることはほぼ確実です。 – Benjamin

答えて

0

私は文脈を説明しなかったので、二重引用符を避けたい理由はわかりません。しかし、これが本当に必要なものであれば、これを達成するために非標準評価を使用することができます。

x <-function(directory) { 
    directory <- as.character(substitute(directory)) 
    y <-file.path(getwd(),directory) 
    setwd(y) 
    } 

as.character(substitute())の使用あなたは何例えば、機能library()は(ライブラリ関数でこれを行い、実際のラインがpackage <- as.character(substitute(package))である。)1は引用を持っているかいないかのいずれかができます正確にどのように、

+0

問題を回避するには、関数に 'orig_wd < - getwd();を含める必要があります。 on.exit(setwd(orig_wd)) 'も同様です。 – Benjamin

+0

@ベンジャミン私はその必要性を理解していません。関数の目的は作業ディレクトリを変更することの副作用であるため、終了時にこの影響を取り消すことは目的を破るようです。 – dww

+0

それは、関数が何をしているかに依存していると思います。これが同じプログラム内で2回呼び出すことができる関数であれば、2回目の呼び出しで失敗する可能性があります。唯一の目的が作業ディレクトリを変更することであれば、それは必要ではありません。 – Benjamin

関連する問題